新闻中心
Golang如何实现邮件发送功能_Golang邮件SMTP发送示例
Go语言通过net/smtp包实现邮件发送,需配置SMTP服务器、使用授权码认证,并支持纯文本和HTML格式邮件;示例展示了QQ邮箱发送流程及封装通用函数的方法。

在Go语言中实现邮件发送功能非常简单,主要依赖标准库中的 net/smtp 包。通过SMTP协议连接邮件服务器,可以轻松发送文本或HTML格式的邮件。下面是一个完整的Golang邮件发送示例,涵盖基本用法和常见配置。
使用 net/smtp 发送纯文本邮件
最基础的邮件发送方式是通过SMTP认证,构造简单的邮件头并发送纯文本内容。以下是一个使用QQ邮箱SMTP服务发送邮件的示例:
package main
import (
"fmt"
"net/smtp"
)
func main() {
// 邮件服务器配置
smtpHost := "smtp.qq.com"
smtpPort := "587"
fromEmail := "your_email@qq.com"
password := "your_authorization_code" // 注意:不是登录密码,是授权码
// 收件人
toEmail := "recipient@example.com"
// 邮件内容
subject := "Subject: 测试邮件\r\n"
body := "这是通过Go程序发送的一封测试邮件。"
msg := []byte(subject + "\r\n" + body)
// 认证信息
auth := smtp.PlainAuth("", fromEmail, password, smtpHost)
// 发送邮件
err := smtp.SendMail(smtpHost+":"+smtpPort, auth, fromEmail, []string{toEmail}, msg)
if err != nil {
fmt.Printf("发送失败: %v\n", err)
return
}
fmt.Println("邮件发送成功!")
}
注意: 使用QQ、163等国内邮箱时,password 应填写“授权码”而非账户登录密码。授权码需在邮箱设置中开启SMTP服务后获取。
发送HTML格式邮件
若想发送更美观的邮件,可使用HTML格式,并设置正确的Content-Type。此时需要手动构造MIME头部:
subject := "Subject: HTML邮件测试\r\n"
mimeHeader := "MIME-version: 1.0;\r\nContent-Type: text/html; charset=\"UTF-8\";\r\n\r\n"
body := "<h1>你好,这是一封HTML邮件</h1><p>支持<strong>加粗</strong>和链接:<a href='https://www.php.cn/link/b05edd78c294dcf6d960190bf5bde635'>点击访问</a></p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/1158">
<img src="https://img.php.cn/upload/ai_manual/000/000/000/175680126158393.png" alt="Motiff妙多">
</a>
<div class="aritcle_card_info">
<a href="/ai/1158">Motiff妙多</a>
<p>Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="Motiff妙多">
<span>334</span>
</div>
</div>
<a href="/ai/1158" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="Motiff妙多">
</a>
</div>
"
msg := []byte(subject + mimeHeader + "\r\n" + body)
将上述 msg 传入 smtp.SendMail 即可发送富文本邮件。
封装通用邮件发送函数
为便于复用,可将邮件发送逻辑封装成函数:
type Email struct {
To string
Subject string
Body string
IsHTML bool
}
func SendEmail(e Email) error {
smtpHost := "smtp.qq.com"
smtpPort := "587"
from := "your_email@qq.com"
password := "your_auth_code"
subject := "Subject: " + e.Subject + "\r\n"
var contentType string
if e.IsHTML {
contentType = "MIME-version: 1.0;\r\nContent-Type: text/html; charset=\"UTF-8\";\r\n\r\n"
}
msg := []byte(subject + contentType + "\r\n" + e.Body)
auth := smtp.PlainAuth("", from, password, smtpHost)
return smtp.SendMail(smtpHost+":"+smtpPort, auth, from, []string{e.To}, msg)
}
调用示例:
err := SendEmail(Email{
To: "user@example.com",
Subject: "欢迎注册",
Body: "<h2>欢迎加入我们!</h2><p>点击链接激活账号</p>",
IsHTML: true,
})
if err != nil {
log.Fatal(err)
}
基本上就这些。只要配置正确,Golang发送邮件并不复杂,但容易忽略授权码和MIME头的细节。以上就是Golang如何实现邮件发送功能_Golang邮件SMTP发送示例的详细内容,更多请关注其它相关文章!
# 发送邮件
# 潮州自助建站seo
# 宁波网站建设软件推广
# 泗水网站建设开发
# 建设工程消防信息网站
# seo搜索技巧大全
# 北辰品牌网站建设
# seo技术分享类文章
# 英山seo获客案例
# 兰州做网站推广哪家好
# 小程序的营销与推广
# 中文网
# 相关文章
# 一封
# 如何实现
# word
# 这是
# 是一个
# 转换为
# 文档
# 邮件发送
# 标准库
# qq邮箱
# 邮箱
# ai
# qq
# go语言
# golang
# go
# html
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】
新手怎么开始学化妆 零基础化妆入门教程
动漫岛观看全网网 动漫岛在线正版动漫入口
Tailwind CSS line-clamp 布局问题解析与修复指南
AO3访问入口汇总 AO3网页版同人作品一键直达
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
随机参数递归函数的基准调用次数与时间复杂度探究
C++ vector二维数组定义_C++ vector of vector用法
淘宝网网页版登录入口 淘宝官方网页版快捷登录
印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】
搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
mc.js游戏直达 mc.js网页免下载版本秒进地址
网易大神账号申诉需要多久_网易大神账号申诉流程说明
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
自定义Bag-of-Words实现:处理带负号的词汇权重
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
zookeeper 都有哪些功能?
苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】
小红书网页版入口链接分享 小红书官网直接进
Django表单提交验证失败后保持字段值不刷新
12306选座系统怎么选连座_12306选座多人连坐操作方法
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
快手官方唯一登录入口 谨防山寨钓鱼网站
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
Promise错误处理:在catch后终止链式then执行的策略
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
汽水音乐在线解析 汽水音乐在线解析入口
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南
Pandas DataFrame 多条件优先级排序与排名
极兔快递快件信息查询系统 极兔快递官网运单号追踪
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
Lar*el递归关系中排除子孙节点的策略
VS Code远程开发时如何处理文件权限问题
黑猫投诉统一入口官网 消费者权益保护投诉平台
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】


2025-11-27
浏览次数:次
返回列表
toEmail := "recipient@example.com"
// 邮件内容
subject := "Subject: 测试邮件\r\n"
body := "这是通过Go程序发送的一封测试邮件。"
msg := []byte(subject + "\r\n" + body)
// 认证信息
auth := smtp.PlainAuth("", fromEmail, password, smtpHost)
// 发送邮件
err := smtp.SendMail(smtpHost+":"+smtpPort, auth, fromEmail, []string{toEmail}, msg)
if err != nil {
fmt.Printf("发送失败: %v\n", err)
return
}
fmt.Println("邮件发送成功!")
}