Go定时邮件发送器由三部分构成:配置SMTP服务(如QQ邮箱需授权码)、封装邮件发送函数(支持HTML并设Content-Type)、用time.Ticker或robfig/cron/v3调度;内容可从文件或数据库读取,用text/template渲染后发送。
用 Go 语言开发一个定时邮件发送器,核心在于三部分:配置邮件服务、构造并发送邮件、按计划触发发送逻辑。不需要复杂框架,标准库 + 少量第三方包就能稳定运行。
Go 自带 net/smtp 包,支持纯文本或简单 HTML 邮件。你需要一个可用的 SMTP 账号(如 Gmail、QQ 邮箱、企业邮箱或 Mailgun 等)。
注意:Gmail 需开启“应用专用密码”,QQ 邮箱需在设置里获取 SMTP
授权码,不能直接用登录密码。
示例配置:
mime/multipart 构造带头信息的邮件时可设置建议封装成独立函数,接收收件人、主题、正文等参数,内部处理认证与连接。支持 HTML 内容时,记得设置 Content-Type: text/html; charset=utf-8 头。
关键点:
auth := smtp.PlainAuth("", user, password, host) 做身份验证smtp.SendMail() 发送,它底层会自动处理 TLS(若端口为 587 或 465)strings.NewReader() 包装,避免手动拼接 MIME 头的复杂度(除非需要附件)Go 没有内置 cron,但有两个轻量选择:
time.Ticker:适合固定间隔(如每小时发一次),代码简洁,无依赖robfig/cron/v3:支持类 Unix cron 表达式(如 "0 30 * * * *" → 每天 03:30 执行),更灵活若需精确到秒级或复杂周期,推荐 cron/v3;若只是每天一次提醒,Ticker 更省心。
提醒邮件通常基于数据动态生成(如用户订阅、待办事项、系统告警)。建议将收件人和内容来源解耦:
text/template 渲染个性化邮件正文(例如 {{.Name}},您的订单 {{.OrderID}} 即将超时)模板渲染后,再调用上一步封装好的发送函数,逐个或批量发送(注意 SMTP 服务商对并发和频次的限制)。
整个流程不复杂但容易忽略细节:SMTP 认证方式、时区处理、错误重试、日志记录、避免被当垃圾邮件(如设置合理发信频率、使用真实发件域名)。上线前务必用测试邮箱走通全流程。