golang 通过 SMTP 服务发送邮件

文章目录

    要在服务器的后台接口上,增加一个发送邮件的接口。每天调用的频率也不高。
    最终选择了这个库

    https://github.com/go-gomail/gomail

    Star 4.5K,近十年没有更新了。。。但测试没有任何问题,而且也完全满足我的需求。

    更新 2025-10-16

    下面是作者去世的说明:

    https://github.com/go-gomail/gomail/issues/182

    Sadly, after a serious accident in 2016, Alexandre Césaro has deceased in 2021 at the age of 35.

    有两个备选:

    • https://github.com/Shopify/gomail 。虽然 2024 年变成了只读,也不维护了。但是至少修复了不少问题,而且不需要修改邮件发送代码。This branch is 87 commits ahead of go-gomail/gomail:master.
    • https://github.com/wneessen/go-mail 。这个看起来比较活跃,但是需要改动代码。

    安装

    > go get gopkg.in/gomail.v2
    

    代码

    package main
    
    import (
    	gomail "gopkg.in/gomail.v2"
    )
    
    func main() {
    
    	msg := gomail.NewMessage()
    	msg.SetHeader("From", "test@163.com")
    	msg.SetHeader("To", "test@qq.com")
    	msg.SetHeader("Subject", "测试邮件")
    	msg.SetBody("text/html", "<b>This is the body of the mail</b>")
    	// msg.Attach("/home/User/cat.jpg")
    
        // 需要去 163 邮箱的手机 app 或者网页端开启 POP3/SMTP服务,并创建一个授权码,
        // 下面的 xxx 就是授权码
    	n := gomail.NewDialer("smtp.163.com", 465, "test@163.com", "xxx")
    
    	// Send the email
    	if err := n.DialAndSend(msg); err != nil {
    		panic(err)
    	}
    }
    

    测试成功。😊

    docker alpine 容器的兼容性

    即,这段代码是否可以在 alpine docker 容器中运行。

    经测试可以,并不需要再单独安装证书,就能正常发送邮件。

    deepseek 提示我可能出现的情况:

    Alpine 镜像默认缺少根证书(CA Certificates)

    看来是多虑了。

    授权码的安全性

    因为可以在 163 邮箱的手机客户端上随时废弃一个授权码。所以相对账号密码形式,这个更方便管理一些。

    普通账号能设置两个授权码, VIP 可以设置 10 个。。。网易还真是会做生意 👍

    授权码 180 天过期?

    这是怎么个意思,难道半年就需要更新一次授权码?

    gmail smtp 测试

    fail to send email: 534 5.7.9 Please log in with your web browser and then try again. For more\n5.7.9 information, go to\n5.7.9 https://support.google.com/mail/?p=WebLoginRequired d9443c01a7336-220d545d448sm12526655ad.150 - gsmtp”

    估计是 gmail 账号的问题。毕竟 163 的邮箱是正常的。

    参考

    • https://www.jianshu.com/p/e1c2fa06cc57
    • https://github.com/go-gomail/gomail
    • https://pkg.go.dev/gopkg.in/gomail.v2#section-readme 这个文档里的示例比较多

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式