Golang中如何在smtp.SendMail添加变量
Golang中如何在smtp.SendMail添加变量 我已经成功将网页表单数据发送到Go后端。除了整合发件人邮箱外,其他功能都运行正常。
手动输入时没有问题:
msg := []byte(“From: sender@example.com\r\n” +
但尝试添加变量时会出现错误:
msg := []byte("From: " + (mail) + “\r\n” +
func Send(form url.Values) {
var mail string
for key, values := range form {
for _, value := range values {
switch key {
case "mail":
mail = value
default:
fmt.Println(key, value)
}
}
}
fmt.Println(mail) <----- 打印的值是正确的
auth := smtp.PlainAuth("", "sibert@gmail.com", "password", "smtp@gmail.com")
from := (mail)
to := []string{"support@example.com"}
msg := []byte((mail) + <----------------- 这里导致错误
"To: support@company.com\r\n" +
"Subject: subject\r\n" +
"\r\n" +
(mail)) <----- 传输的值是正确的
err := smtp.SendMail("smtp.gmail.com:587", auth, from, to, msg)
if err != nil {
log.Fatal(err)
}
}
有什么建议如何使用变量"mail"来发送表单值吗?
更多关于Golang中如何在smtp.SendMail添加变量的实战教程也可以访问 https://www.itying.com/category-94-b0.html
5 回复
from 的值是什么?错误信息是?
更多关于Golang中如何在smtp.SendMail添加变量的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Yamil_Bracho:
from 的值是多少?错误信息是什么?
url.Values。Golang 崩溃了,
Sibert:
msg := []byte("From: " + (mail) + “\r\n” +
这个语法解决了实际问题——即不使用括号:
msg := []byte("From: " + mail + “\r\n” +
msg := []byte("From: " + mail + "\r\n" +
问题在于邮件消息格式不正确。当使用变量构建邮件头时,需要确保遵循正确的SMTP邮件格式规范。以下是修正后的代码:
func Send(form url.Values) {
var mail string
for key, values := range form {
for _, value := range values {
switch key {
case "mail":
mail = value
default:
fmt.Println(key, value)
}
}
}
fmt.Println(mail) // 打印的值是正确的
auth := smtp.PlainAuth("", "sibert@gmail.com", "password", "smtp.gmail.com")
from := mail
to := []string{"support@example.com"}
// 正确的邮件消息格式
msg := []byte("From: " + mail + "\r\n" +
"To: support@example.com\r\n" +
"Subject: subject\r\n" +
"\r\n" +
"Email from: " + mail + "\r\n")
err := smtp.SendMail("smtp.gmail.com:587", auth, from, to, msg)
if err != nil {
log.Fatal(err)
}
}
关键修正点:
- 在邮件头中明确指定
From:字段 - 确保每个邮件头行以
\r\n结尾 - 邮件头和邮件体之间用空行分隔(
\r\n\r\n)
如果需要更复杂的邮件格式,可以使用 mime 和 net/mail 包:
import (
"net/mail"
"mime"
"bytes"
)
func SendWithMIME(form url.Values) {
var mail string
for key, values := range form {
for _, value := range values {
switch key {
case "mail":
mail = value
default:
fmt.Println(key, value)
}
}
}
// 使用mime格式构建邮件
var msg bytes.Buffer
msg.WriteString("From: " + mime.QEncoding.Encode("utf-8", mail) + "\r\n")
msg.WriteString("To: support@example.com\r\n")
msg.WriteString("Subject: subject\r\n")
msg.WriteString("MIME-Version: 1.0\r\n")
msg.WriteString("Content-Type: text/plain; charset=\"utf-8\"\r\n")
msg.WriteString("\r\n")
msg.WriteString("Email from: " + mail + "\r\n")
auth := smtp.PlainAuth("", "sibert@gmail.com", "password", "smtp.gmail.com")
from := mail
to := []string{"support@example.com"}
err := smtp.SendMail("smtp.gmail.com:587", auth, from, to, msg.Bytes())
if err != nil {
log.Fatal(err)
}
}


