全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何在 Go 中通过 SMTP 发送邮件并自定义发件人名称

在 go 中使用标准库 `net/smtp` 发送邮件时,`client.mail()` 仅接受纯邮箱地址作为参数,而显示给收件人的“发件人名称”需通过邮件头(`from` 字段)设置为 `"姓名 "` 格式,二者必须分离处理。

Go 的标准 net/smtp 包要求严格区分SMTP 协议层的发件人身份(用于认证与投递校验)和邮件内容层的显示发件人(用于收件人界面展示)。若将 "Sandy Sender " 直接传入 Client.Mail(),SMTP 服务器会因格式非法返回 501 5.1.7 Invalid address 错误——因为协议层只允许 RFC 5321 兼容的纯邮箱地址(如 或 user@example.com),不支持带名称的 name 格式。

✅ 正确做法是 “双轨设置”

  • Client.Mail() 参数:仅传入纯邮箱地址(如 "user@example.com"),用于 SMTP 认证与路由;
  • 邮件正文头部(Header):在构造的邮件内容中显式写入 From: Sandy Sender 行,该字段控制客户端显示效果。

以下是一个完整、可运行的标准库示例(使用 strings.Reader 构造原始邮件):

package main

import (
    "fmt"
    "net/smtp"
    "strings"
)

func main() {
    // SMTP 配置
    auth := smtp.PlainAuth("", "user@example.com", "app-password", "smtp.example.com")

    // 构造符合 RFC 5322 的原始邮件(注意:From 头含名称)
    msg := strings.NewReader(`From: Sandy Sender 
To: recipient@example.com
Subject: Hello from Go!
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"

This is the body of the message.
`)

    // 关键:Client.Mail() 只传纯邮箱地址(无名称!)
    err := smtp.SendMail(
        "smtp.example.com:587",
        auth,
        "user@example.com",           // ← 必须是纯邮箱(与 From 头中的地址一致)
        []string{"recipient@example.com"},
        msg,
    )
    if err != nil {
        panic(fmt.Sprintf("failed to send email: %v", err))
    }
    fmt.Println("Email sent successfully!")
}

⚠️ 注意事项:

  • Client.Mail() 的 from 参数与 From: 邮件头中的邮箱地址必须完全一致(忽略大小写),否则部分 SMTP 服务(如 Gmail、Outlook)会拒绝投递或标记为伪造;
  • 名称部分(如 Sandy Sender)仅影响收件端显示,不参与 SMTP 认证,因此不能包含特殊字符(建议仅用 ASCII 字母、空格、连字符);
  • 若需更健壮的邮件构建能力(如附件、HTML 正文、多收件人、自动 MIME 编码),推荐使用成熟第三方库,例如 gomail(v2):
m := gomail.NewMessage()
m.SetAddressHeader("From", "user@example.com", "Sandy Sender") // 自动组装为 "Sandy Sender "
m.SetAddressHeader("To", "recipient@example.com", "")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/plain", "This is the body.")
// ... 发送逻辑

gomail 内部已封装上述分离逻辑,开发者无需手动拼接原始邮件,显著降低出错风险。

总结:Go 原生 SMTP 发送邮件时,“显示名称”与“协议发件人”必须解耦处理——前者写入邮件头 From 字段,后者单独传入 Client.Mail()。理解这一分层设计,是实现专业邮件发送的关键基础。


# word  # html  # go  # 编码  # app  # ai  # 路由  # outlook  # 邮箱  # 标准库  # 封装  # mail  # ASCII  # 邮箱地址  # 是一个  # 这一  # 推荐使用  # 不支持  # 第三方  # 设置为  # 发送邮件  # 仅用  # 只允许 


相关文章: 中山网站推广排名,中山信息港登录入口?  如何获取免费开源的自助建站系统源码?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何在企业微信快速生成手机电脑官网?  微课制作网站有哪些,微课网怎么进?  如何通过虚拟机搭建网站?详细步骤解析  北京网站制作公司哪家好一点,北京租房网站有哪些?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站主机选择指南:服务器配置与SEO优化实战技巧  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  网站app免费制作软件,能免费看各大网站视频的手机app?  php json中文编码为null的解决办法  建站org新手必看:2024最新搭建流程与模板选择技巧  建站主机是什么?如何选择适合的建站主机?  再谈Python中的字符串与字符编码(推荐)  建站之星伪静态规则如何正确配置?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何通过免费商城建站系统源码自定义网站主题与功能?  专业商城网站制作公司有哪些,pi商城官网是哪个?  建站之星后台密码如何安全设置与找回?  香港服务器租用每月最低只需15元?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  如何在Windows虚拟主机上快速搭建网站?  制作门户网站的参考文献在哪,小说网站怎么建立?  如何通过主机屋免费建站教程十分钟搭建网站?  如何在阿里云香港服务器快速搭建网站?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何用已有域名快速搭建网站?  C++中引用和指针有什么区别?(代码说明)  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  如何实现建站之星域名转发设置?  如何设置并定期更换建站之星安全管理员密码?  SQL查询语句优化的实用方法总结  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  用v-html解决Vue.js渲染中html标签不被解析的问题  Swift中循环语句中的转移语句 break 和 continue  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  网站微信制作软件,如何制作微信链接?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  青浦网站制作公司有哪些,苹果官网发货地是哪里? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。