新闻中心
Golang如何用 net/smtp 发送邮件_Golang SMTP 客户端邮件发送实战
使用Golang的net/smtp包发送邮件需配置正确认证与加密。首先采用587端口通过StartTLS建立加密连接,使用授权码而非登录密码进行PLAIN认证,构造符合MIME标准的邮件头部与正文,利用smtp.Dial建立连接后依次调用StartTLS、Auth、Mail、Rcpt、Data等方法完成发送,注意处理UTF-8编码以避免中文乱码,推荐使用第三方库简化HTML邮件或附件添加。

使用 Golang 的 net/smtp 包发送邮件并不复杂,但需要注意认证方式、加密协议和邮件格式的正确设置。下面将从基础到实战,详细介绍如何用 Go 实现通过 SMTP 发送邮件。
SMTP 基础与认证方式
Go 的 net/smtp 包支持基于明文、登录(LOGIN)、普通密码(PLAIN)等认证机制。大多数现代邮件服务商(如 Gmail、QQ 邮箱、163 等)要求使用 TLS 加密连接,并配合 App Password 或授权码进行身份验证。
常见端口:
- 587:STARTTLS,先明文连接再升级加密
- 465:旧式 SSL/TLS 加密连接(Go 中需手动封装 TLS)
注意:Go 的 net/smtp 不直接支持 465 端口的隐式 TLS,建议使用 587 + StartTLS。
构造标准邮件内容
邮件正文需遵循 MIME 格式。最简单的纯文本邮件可通过拼接 Header 实现:
To: recipient@example.com Subject: 测试邮件 这是邮件正文。
关键点是空行分隔头部与正文。若带 HTML 或附件,结构更复杂,建议使用第三方库(如 mail/v2),但原生实现也可行。
Perplexity
Perplexity是一个ChatGPT和谷歌结合的超级工具,可以让你在浏览互联网时提出问题或获得即时摘要
302
查看详情
代码实战:发送纯文本邮件
以下是一个完整示例,使用 QQ 邮箱或 Gmail 的 SMTP 发送邮件:
package main
import (
"crypto/tls"
"fmt"
"net/mail"
"net/smtp"
)
func sendEmail() error {
from := "your_email@qq.com"
password := "your_authorization_code" // 不是登录密码
to := "recipient@example.com"
smtpHost := "smtp.qq.com"
smtpPort := "587"
// 构造邮件内容
subject := "测试主题"
body := "这是一封来自 Go 程序的测试邮件。"
msg := fmt.Sprintf("To: %s\r\nSubject: %s\r\n\r\n%s", to, subject, body)
// 解析发件人邮箱
sender, err := mail.ParseAddress(from)
if err != nil {
return err
}
auth := smtp.PlainAuth("", from, password, smtpHost)
// 建立连接
conn, err := smtp.Dial(smtpHost + ":" + smtpPort)
if err != nil {
return err
}
defer conn.Close()
// 启用 TLS
if err = conn.StartTLS(&tls.Config{ServerName: smtpHost}); err != nil {
return err
}
// 认证
if err = conn.Auth(auth); err != nil {
return err
}
// 设置发件人和收件人
if err = conn.Mail(sender.Address); err != nil {
return err
}
if err = conn.Rcpt(to); err != nil {
return err
}
// 写入邮件数据
writer, err := conn.Data()
if err != nil {
return err
}
_, err = writer.Write([]byte(msg))
if err != nil {
return err
}
err = writer.Close()
if err != nil {
return err
}
return conn.Quit()
}
func main() {
if err := sendEmail(); err != nil {
fmt.Printf("发送失败: %v\n", err)
} else {
fmt.Println("邮件发送成功!")
}
}
常见问题与注意事项
实际使用中容易出错的地方:
- 授权码问题:QQ、Gmail 等需开启 SMTP 并生成专用授权码,不能用账户登录密码。
- TLS 配置:StartTLS 要求正确设置 ServerName,否则证书校验失败。
- 防火墙/网络:某些环境屏蔽 587 端口,可尝试代理或更换网络。
- 中文乱码:Subject 和正文应使用 UTF-8 编码,必要时 Base64 编码 Subject。
如果需要发送 HTML 邮件或多部分内容,建议引入 github.com/go-gomail/gomail 或 github.com/jordan-wright/email 等库简化操作。
基本上就这些。掌握 net/smtp 的核心流程后,可以灵活扩展功能,比如批量发送、模板填充等。不复杂但容易忽略细节,尤其是安全配置部分。
以上就是Golang如何用 net/smtp 发送邮件_Golang SMTP 客户端邮件发送实战的详细内容,更多请关注其它相关文章!
# seo优化员
# 邮件发送
# 是一个
# 这是
# 客户端
# 第三方
# 互联网
# 云南网站建设较好的公司
# 岳阳网站建设怎么收费
# 如何用
# 汕头网站建设主机托管
# 鄂州网站建设运营方案
# 如何优化网站长尾词
# 汕头公司网站建设制作
# 厦门seo交流会
# 临汾远程指导网站建设
# 网站建设的小结
# 端口
# html
# git
# go
# github
# golang
# 编码
# 防火墙
# app
# word
# qq
# ssl
# 中文乱码
# ai
# 文档
# 发送邮件
# 转换为
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
Excel文件在线转换快速入口 Excel在线格式转换网站
QQ网页版官方账号入口 QQ网页版网页版登录指南
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
探索高级语言到原生C/C++的转译:挑战与内存管理策略
解决移动端滚动问题的overflow属性应用指南
斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程
Golang如何使用net/url解析URL_Golang URL解析与处理方法
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑
J*aScript中安全有效地处理localStorage字符串数据
Archive of Our Own官网直达 AO3最新可用地址一览
PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误
PHP中高效并行检查多链接状态的教程
顺丰国际快递查询 国际件官方查询入口
邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策
在Qt QML中通过Python字典动态更新TextEdit内容的教程
AO3官方在线访问地址 Archive of Our Own最新镜像合集
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
如何将HTML表格多行数据保存到Google Sheet
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句
如何仅使用CSS更改登录界面背景图像图标的颜色
妖精动漫免费平台 妖精动漫官网资源观看网址
如何更改在 Excel 中打开超链接时的默认浏览器
J*a应用程序首次运行自动创建文件与目录的最佳实践
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
C++ explicit关键字防止隐式转换_C++构造函数安全规范
Win11怎么开启省电模式_Win11电池节电模式自动开启
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版
高德地图公交到站提醒失败如何解决 高德提醒权限设置
AO3最新可访问网址 Archive of Our Own官方在线入口
曝R星经典之作开发图 设计简陋但信息密集!
实现分段式页面滚动导航:CSS与J*aScript教程
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
mc.js免安装版 mc.js一键畅玩入口
c++ 命名空间怎么用 c++ namespace使用指南
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
msn官网入口地址手机版 msn官方网站手机最新链接
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
qq游戏免费畅玩入口_qq游戏电脑版快速启动
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
Mac怎么查看崩溃日志_Mac控制台错误报告分析


2025-11-13
浏览次数:次
返回列表
8编码以避免中文乱码,推荐使用第三方库简化HTML邮件或附件添加。