golang 通过 SMTP 服务发送邮件

更新日期: 2025-02-14 阅读次数: 230 字数: 414 分类: golang

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

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

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

安装

> 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 聊聊, 查看更多联系方式