无需为每个域名配置身份、仅依赖SPF记录的AWS环境邮件发送方案咨询
兄弟,我太懂你这种头疼的情况了——几十上百个客户域名,一个个去协调IT部门配置SES身份,光是沟通成本都能把人搞疯,更别说还要改现有PHP脚本的逻辑。下面给你几个实际可行的方案,看看哪个适合你:
方案1:用支持「仅SPF授权」的第三方邮件中继服务
市面上有些邮件服务商支持只通过SPF记录来授权发送,不需要每个域名单独配置DKIM或者复杂的身份验证。你只需要找这类服务商,然后让每个客户在他们的域名SPF记录里加上服务商提供的SPF标识(比如include:spf.your-service.com),服务商就会允许你代表该域名发邮件。
PHP集成这块几乎不用大改现有脚本:这类服务大多支持SMTP协议,你可以用PHPMailer这类库,或者直接修改PHP的mail()函数配置,把发送端从本地sendmail换成服务商的SMTP服务器就行。甚至有些服务商还提供API接口,不过SMTP方式更贴近你现有sendmail的使用逻辑。
注意选服务商的时候一定要确认清楚,他们确实支持SPF-only的授权模式,有些服务商默认要求DKIM,但可能有批量授权的特殊方案,多问几句客服就行。
方案2:自建EC2邮件中继服务器(配弹性IP)
如果你不想依赖第三方,也可以在EC2上搭自己的邮件中继(比如用Postfix),不过要先搞定AWS的限制:EC2默认封了出站的25端口,你需要提交工单申请解封,或者用587、465这些替代端口。
配置上,给中继服务器分配一个固定的弹性IP,然后让每个客户在他们的SPF记录里添加这个IP(比如ip4:1.2.3.4),这样你发的邮件走这个中继出去,SPF验证就能通过。
PHP这边几乎不用改,继续用sendmail或者配置PHP用本地的Postfix当SMTP服务器就行。不过这个方案需要你自己维护服务器的稳定性、反垃圾邮件策略,得有运维精力才行。
方案3:AWS SES批量自动化配置(退而求其次的选择)
虽然你不想一个个配,但SES其实可以用CLI或者API批量导入域名、生成验证记录。如果客户只需要添加一条SPF记录(include:amazonses.com)和一条SES自动生成的DKIM记录,其实配置量没你想的那么大——你可以写个简单的教程让客户IT照着做,甚至做个小工具帮他们生成需要添加的记录。
PHP集成SES也很方便,用AWS SDK for PHP或者直接用SES的SMTP接口,替换现有sendmail的逻辑成本很低。而且这个方案完全贴合AWS生态,稳定性和可靠性都有保障,要是能说服客户配合做一次配置,长期来看是最省心的。
小建议
优先考虑方案1,不用自己运维,也只需要客户加一条SPF;如果客户愿意配合,方案3是AWS环境下的最优解;方案2适合有运维团队、不想依赖第三方的情况。
备注:内容来源于stack exchange,提问作者AKT

