You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:45:14