
在使用Go语言的net/smtp包发送邮件时,一个常见的困扰是发件人地址(From address)无法正确设置,导致邮件在接收方显示为空白或被标记为垃圾邮件。这是因为smtp.SendMail函数期望的邮件内容,实际上包含了用户自定义的头部信息和邮件正文,两者之间需要用两个换行符分隔。
SMTP协议对邮件内容有特定的格式要求。除了邮件正文,还需要包含必要的头部信息,例如From(发件人地址)和Subject(邮件主题)。这些头部信息和邮件正文需要组合成一个字符串,并传递给smtp.SendMail函数。
以下是一个示例,展示了如何构建包含发件人地址和主题的邮件内容:
package main
import (
"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("邮件发送成功!")
}代码解释:
立即学习“go语言免费学习笔记(深入)”;
注意事项:
通过正确构建包含发件人地址的邮件内容,可以避免邮件被识别为垃圾邮件,并确保收件人能够正确识别发件人。在使用net/smtp包发送邮件时,务必注意SMTP协议对邮件格式的要求,将头部信息和邮件正文正确组合,并使用合适的认证方式。
以上就是如何使用Go语言的SMTP发送带有正确发件人地址的邮件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号