新闻中心

Golang如何实现邮件发送功能_Golang邮件SMTP发送示例

2025-11-27
浏览次数:
返回列表
Go语言通过net/smtp包实现邮件发送,需配置SMTP服务器、使用授权码认证,并支持纯文本和HTML格式邮件;示例展示了QQ邮箱发送流程及封装通用函数的方法。

golang如何实现邮件发送功能_golang邮件smtp发送示例

在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种神仙用法【技巧】 

搜索