记一次给博客配置腾讯企业邮箱发信
最近想给博客加个邮箱验证码功能,比如评论、登录之类的场景都能用到。
但问题来了,我需要一个能发邮件的地址,总不能用我私人邮箱吧。那就搞个 noreply@nnnnzs.cn,专门用来发系统邮件。
我的现状
我的域名 nnnnzs.cn 是在腾讯云买的,但 DNS 解析一直托管在 Cloudflare 上。之前开通过腾讯企业邮箱,但没怎么用。
这次要配置企业邮箱的 SMTP 发信,整体流程踩了不少坑,记录一下。
第一步:配置 DNS 记录
企业微信的管理后台是真的反人类,操作流程七拐八弯的。好不容易找到邮箱配置入口,它自动在腾讯云 DNS 里加了解析记录:
- TXT
@→v=spf1 include:spf.mail.qq.com ~all - CNAME
qqmail312ca548→mail.qq.com - MX
@→mxbiz1.qq.com(优先级 5) - MX
@→mxbiz2.qq.com(优先级 10)
但我的 DNS 解析在 Cloudflare 啊,腾讯云那边加了也没用。
解决办法很简单,手动把这些记录同步到 CF 上。用 Cloudflare API 批量加就行,几条 curl 的事。加完之后把腾讯云那边自动创建的旧记录删掉,DNS 只以 CF 为准。
注意:邮箱相关的 MX、TXT、CNAME 记录,代理状态要关掉(灰色云朵"仅 DNS"),不能走 CF 代理。
第二步:创建公共邮箱
一开始我想的是,企业邮箱必须先有成员才有邮箱,那 noreply 这个账号不是要占一个成员席位?
后来发现企业邮箱有个公共邮箱功能,就是不占用成员席位的独立邮箱,专门用来干这种事。完美。
但这里有个坑:我第一次创建公共邮箱的时候,自定义域名 nnnnzs.cn 还没验证通过,所以系统自动给我分配了 noreply@nnnnzs.wecom.work 这个后缀。
说实话,wecom.work 这个后缀太丑了,看着就不像正经域名,完全不能忍。
第三步:修复域名后缀
去企业邮箱管理后台,域名管理里确认 nnnnzs.cn 状态是"已验证"且"使用中"。
然后删掉旧的 noreply@nnnnzs.wecom.work 公共邮箱,重新创建一个。这次因为域名已经验证过了,直接就是 noreply@nnnnzs.cn。
第四步:验证 SMTP
NestJS 里用 nodemailer 连 SMTP 发信,配置如下:
typescript
const transporter = nodemailer.createTransport({
host: "smtp.exmail.qq.com",
port: 465,
secure: true,
auth: {
user: "noreply@nnnnzs.cn",
pass: "你的密码",
},
});
腾讯企业邮箱的 SMTP/IMAP 配置:
- SMTP:
smtp.exmail.qq.com,端口 465(SSL) - IMAP:
imap.exmail.qq.com,端口 993(SSL)
写了个测试脚本发了一封到我的 QQ 邮箱,秒收,发件人显示 noreply@nnnnzs.cn,搞定。
总结
整个流程说起来不复杂,但实际操作的时候,企业微信后台的 UI 真的让人头疼。找入口、加域名、验证记录、创建公共邮箱,每一步都得摸索半天。
关键点就是:先验证自定义域名,再创建公共邮箱。顺序反了就会拿到 wecom.work 的后缀。
现在 noreply@nnnnzs.cn 可以正常发邮件了,接下来就可以在博客 API 里加验证码功能了。