以下是通过本地后缀服务器发送电子邮件的代码段:
from := r.FormValue("from")
to := strings.Split(r.FormValue("to"), ";")
body := r.FormValue("body")
mime := "MIME-version:1.0;\nContent-Type:text/html;charset=\"UTF-8\";\n\n"
subject := fmt.Sprintf("Subject: %s\n", r.FormValue("subject"))
msg := []byte(subject + mime + body)
err := smtp.SendMail("localhost:25", nil, from, to, msg)
电子邮件已发送/收到。但是,它在收到的电子邮件的“收件人”字段中缺少收据地址。我也在交换服务器上尝试过。收据地址也丢失了。以下是它在电子邮件来源中显示的内容。
To: Undisclosed recipients:;
有任何修复建议吗?谢谢!
答案 0 :(得分:1)
您正在设置邮件信封的值,但除了Subject:
之外,您还没有在电子邮件中添加任何标题。您还应该使用\r\n
作为电子邮件的换行符。
最小的例子可能如下:
headers := make(map[string]string)
headers["Subject"] = "this is a test"
headers["From"] = "me@example.com"
headers["To"] = "you@example.com"
body := "hello,\nthis is a test"
var msg bytes.Buffer
for k, v := range headers {
msg.WriteString(k + ": " + v + "\r\n")
}
msg.WriteString("\r\n")
msg.WriteString(body)
其他一些有用的stdlib包:
net/textproto
用于MIME标头处理net/mail
用于地址处理(虽然该包实际上仅用于解析电子邮件)