解决 FarBox 2.0 中使用 AWS SES 的问题
FarBox 2.0 中的邮件通知系统使用了 AWS SES 服务。在仔细研究了 AWS 的逻辑之后,历经一年多,终于完全搞定。不得不说,FarBox 真是一个自学 web 开发的「好」例子...
SES 是一个第三方邮件服务,相当于 AWS 的邮件群发服务。在使用上,通过 API 或 SDK 可以将相同的内容推送给大量客户,算是一个常用且刚需的服务。但是需要有几个注意:
- 沙盒时,只有发件人邮箱和登记的邮箱域名才可以收发邮件
- AWS 各个区域是独立运营的,也就是说如果要使用多个区域的 SES 服务,需要分别开通和验证信息。
- 沙盒模式的 SES 服务会对收件、发件、抄送的人都做邮箱校验,因此如果这三个地址中存在任何未被验证的地址,邮件发送将被拒绝,提示:
MessageRejected: An error occurred (MessageRejected) when calling the SendEmail operation: Email address is not verified. The following identities failed the check in region US-EAST-1
参考:Amazon SES email sending errors - Amazon Simple Email Service
开通其实看看文档,搜搜网页就可以知道 SES 的用法。但是 FarBox 的坑在于以下知识需要读源码:
- 只支持 us-east-1 区的 SES
https://github.com/hepochen/FarBox/blob/daeda4f5080467f1ddf4b60424b8562f914756bd/farbox_bucket/utils/mail/utils.py#L34
- 刚开始设好 SES 后,只收得到读者留言的邮件提醒,回复给读者对方却收不到邮件
知道原因解决起来就容易了。
- 开个对应区域的 SES
- 在
/data/log/farbox/web.log
里找到 SES 相关的错误原因,将 SES 从沙盒模式转为生产模式
搬迁到bwg测试邮件
@wellsleep rep
再试一下吧