Go语言smtp包发送邮件成功但正文为空的修复方法
修复Gmail邮件正文缺失的问题
我使用Go的smtp包发送邮件到Gmail,邮件成功送达但正文为空。相关代码如下:
helper 包代码
package helper import ( "math/rand" "net/smtp" "time" ) func RandomStringBytes() string { rand.Seed(time.Now().UnixNano()) number := []byte("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") b := make([]byte, 6) for i := range b{ b[i] = number[rand.Intn(len(number))] } return string(b) } func SendEmail(to string, code string) error { from := "xxx" password := "xxx" smptServer := "smtp.gmail.com:587" subject := "Verification Code" body := "Your verification code is: "+code message := "From: "+ from + "\n" + "To: " + to + "\n" + "Subject: " + subject + "\n" + body auth := smtp.PlainAuth("", from, password, "smtp.gmail.com") return smtp.SendMail(smptServer, auth, from, []string{to}, []byte(message)) }
main 包代码
package main import ( "fmt" "your-project-path/helper" ) func emailVerify() { email := "xxx" code := helper.RandomStringBytes() fmt.Println("Code:", code) err := helper.SendEmail(email, code) if err != nil { fmt.Println("Error sending email:", err) return } } func main(){ emailVerify() }
问题原因与修复方案
构造邮件内容时,邮件头(From、To、Subject)和正文之间必须用两个换行符(\n\n)分隔,原代码中仅使用单个换行,导致Gmail无法正确识别正文,将其当作邮件头的一部分处理,最终显示为空。
修改SendEmail函数中的message构造代码:
message := "From: "+ from + "\n" + "To: " + to + "\n" + "Subject: " + subject + "\n\n" + // 替换为两个换行符 body
SMTP邮件格式规范要求,邮件头区域结束后必须有一个空行,以此区分头和正文内容。补充这个空行后,Gmail就能正确解析并显示邮件正文了。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

