
在使用Go语言的net/smtp包发送邮件时,一个常见的困扰是发件人地址(From address)无法正确设置,导致邮件在接收方显示为空白或被标记为垃圾邮件。这是因为smtp.SendMail函数期望的邮件内容,实际上包含了用户自定义的头部信息和邮件正文,两者之间需要用两个换行符分隔。
构建正确的邮件内容
SMTP协议对邮件内容有特定的格式要求。除了邮件正文,还需要包含必要的头部信息,例如From(发件人地址)和Subject(邮件主题)。这些头部信息和邮件正文需要组合成一个字符串,并传递给smtp.SendMail函数。
以下是一个示例,展示了如何构建包含发件人地址和主题的邮件内容:
package mainimport ( "fmt" "log" "net/smtp")func main() { // 邮箱配置 from := "sender@example.com" // 你的发件人邮箱 password := "your_password" // 你的邮箱密码 to := []string{"recipient@example.com"} // 收件人邮箱 // SMTP 服务器地址和端口 smtpServer := "smtp.example.com" smtpPort := 587 // 或其他端口,例如 465 // 构建邮件内容 subject := "这是一封来自Go的测试邮件" body := "你好,这是一封使用Go语言 net/smtp 包发送的测试邮件!" message := fmt.Sprintf("From: %s\r\n", from) message += fmt.Sprintf("To: %s\r\n", to[0]) // 简单起见,只取第一个收件人 message += fmt.Sprintf("Subject: %s\r\n", subject) message += "\r\n" // 头部信息和正文之间需要一个空行 message += body // 认证信息 auth := smtp.PlainAuth("", from, password, smtpServer) // 发送邮件 err := smtp.SendMail(fmt.Sprintf("%s:%d", smtpServer, smtpPort), auth, from, to, []byte(message)) if err != nil { log.Fatal(err) } fmt.Println("邮件发送成功!")}
代码解释:
Shakker
多功能AI图像生成和编辑平台
103 查看详情
立即学习“go语言免费学习笔记(深入)”;
from、password、to、smtpServer、smtpPort: 这些变量用于配置你的邮箱信息、SMTP服务器地址和端口。请根据你使用的邮箱服务商进行相应的配置。subject 和 body: 定义了邮件的主题和正文内容。message: 这是构建邮件内容的关键部分。 我们使用 fmt.Sprintf 函数将 From、To、Subject 等头部信息格式化到字符串中,并在最后添加一个空行 (\r\n) 分隔头部和正文。 注意,头部信息必须以 \r\n 结尾。auth: 创建 SMTP 认证信息,使用 smtp.PlainAuth 函数。smtp.SendMail: 调用 smtp.SendMail 函数发送邮件。 注意,传递给 smtp.SendMail 函数的 msg 参数是包含头部信息的完整邮件内容。
注意事项:
确保你使用的邮箱服务开启了SMTP服务,并且允许通过客户端发送邮件。某些邮箱服务可能需要设置“应用专用密码”才能用于SMTP认证。smtpServer 和 smtpPort 必须与你使用的邮箱服务商提供的SMTP服务器地址和端口匹配。如果你的邮件内容包含中文,可能需要进行编码,以避免乱码问题。可以使用mime/quotedprintable包进行编码。
总结
通过正确构建包含发件人地址的邮件内容,可以避免邮件被识别为垃圾邮件,并确保收件人能够正确识别发件人。在使用net/smtp包发送邮件时,务必注意SMTP协议对邮件格式的要求,将头部信息和邮件正文正确组合,并使用合适的认证方式。
以上就是如何使用Go语言的SMTP发送带有正确发件人地址的邮件的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1135037.html
微信扫一扫
支付宝扫一扫