Exim作为MTA对接Amazon SES时,如何配置以遵守其速率及收件人限制?
Exim作为MTA对接Amazon SES时,如何配置以遵守其速率及收件人限制?
当然可以通过Exim的配置搞定这两个需求,我来一步步给你讲清楚怎么做,解决你遇到的拆分后ID不变和速率控制的问题:
一、拆分多收件人邮件,生成独立Message-ID
你之前尝试的方法没生效,核心问题是只限制了收件人数,但没让Exim为拆分后的每封邮件生成新的Message-ID,同时也没正确触发邮件拆分逻辑。
在你的Exim配置里,找到对接Amazon SES的路由器(router)和传输器(transport),做如下修改:
1. 配置Router实现收件人拆分
ses_router: driver = manualroute domains = ! +local_domains # 只处理外发邮件 transport = ses_transport route_list = * email-smtp.us-east-1.amazonaws.com::587 # 替换成你的SES区域地址 split_maxrcpt = 1 # 强制把多收件人邮件拆成单收件人邮件(如果要保留最多50人就改成50) headers_remove = Bcc # 移除原始Bcc头,避免SES重复处理
这里的split_maxrcpt是关键——它会主动把To/CC/Bcc里的每个收件人拆成单独的邮件,而不是只限制每封邮件的收件人数。
2. 配置Transport生成独立Message-ID
ses_transport: driver = smtp hosts = email-smtp.us-east-1.amazonaws.com port = 587 hosts_require_tls = yes hosts_require_auth = yes message_id = auto # 为每封拆分后的邮件生成全新的Message-ID auth_username = YOUR_SES_ACCESS_KEY # 替换成你的SES密钥 auth_password = YOUR_SES_SECRET_KEY
加上message_id=auto后,每拆分出一封邮件,Exim都会自动生成一个唯一的Message-ID,彻底解决你遇到的“整个信封用同一个ID”的问题。
二、控制发送速率,遵守SES每秒发送上限
Exim自带速率控制功能,直接在刚才的ses_transport里加配置就行,分两种情况:
1. 如果你用的是Exim 4.94及以上版本(推荐)
直接用rate参数精准控制每秒发送量:
ses_transport: # 保留上面的所有配置 rate = 14/s # 限制每秒最多发送14封邮件,刚好匹配SES的上限
2. 旧版本Exim(4.93及以下)
用delay_after和delay组合来实现近似的速率控制:
ses_transport: # 保留上面的所有配置 delay_after = 14 # 每发送14封邮件后 delay = 1s # 延迟1秒再继续发送
这样平均下来每秒发送量就会控制在14封左右,符合SES的要求。
验证配置
修改完配置后,重启Exim服务,然后发一封带多个收件人的测试邮件,检查Exim的日志(通常在/var/log/exim/main.log),你会看到每一个收件人都对应一封独立的邮件,且每个邮件的Message-ID都不一样,同时发送速率会被严格限制在每秒14封以内。
备注:内容来源于stack exchange,提问作者mhbeyle
相关产品推荐
相关产品推荐

