邮箱校验与邮件发送状态落库

zjc 于 2026-08-07 发布

邮件接口被滥用时,最常见的问题不是发送失败,而是把非法地址、超长内容和无法追踪的请求送进 SMTP。项目在邮件服务里做了两道很实用的防线:先校验收件人,再持久化发送过程。

一、地址格式先拦住

收件人、抄送、密送都支持逗号分隔,解析时会逐个 trim 并匹配基础格式:

local@domain.top

非法地址在入库和发送前直接抛出异常。这个校验不证明邮箱真实存在,但能挡住明显错误和大部分脏输入。

二、可选字段允许为空

抄送和密送可以为空;为空时不设置对应 header。收件人则必须提供,避免构建出一封没有目标地址的邮件。

三、先写待发送

发送前保存 status=0 的记录。这样即使进程在发送过程中中断,也能留下一条待处理痕迹,而不是完全丢失。

四、发送后更新结果

成功更新为 status=1;失败更新为 status=2 并保存错误信息。这个状态机虽然简单,但已经能回答:

五、经验总结

外部系统调用前先落一条初始状态,是提高可观测性的经典做法。后续要扩展重试和告警,也可以基于这张状态表继续演进。