我正在尝试使用Amazon SES作为我的EC2 Ubuntu’精确’服务器的SMTP网关,为不同的原始电子邮件域使用不同的SES帐户.
postfix documentation似乎暗示这是可能的,但SES总是声称我使用了错误的凭据(“535身份验证凭据无效”).如果我通过relayhost指令将所有电子邮件路由到同一个SES帐户,则凭据有效.
这就是我所拥有的.
main.cf(相关部分):
relayhost = sender_dependent_relayhost_maps = regexp:/etc/postfix/sender_dependent_relayhost_map smtp_sender_dependent_authentication = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = regexp:/etc/postfix/smtp_sasl_password_map smtp_use_tls = yes smtp_tls_security_level = encrypt smtp_tls_note_starttls_offer = yes smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
sender_dependent_relayhost_map:
/.*@example\.com/ [email-smtp.us-east-1.amazonaws.com]:25
smtp_sasl_password_map:
/.*@example\.com/ AK...:34.../...
其中AK …是AWSAccessKeyId,而34 … / …是AWSSecretKey.
/var/log/mail.log中的错误消息是:
Aug 20 21:47:39 example postfix/smtp[18496]: DE1E14218D: SASL authentication Failed; server email-smtp.us-east-1.amazonaws.com[23.23.139.32] said: 535 Authentication Credentials Invalid
有什么方法可以看到它试图使用哪些凭证?
–
更新:要进行调试,我已使用MysqL映射替换了我的regexp映射,并启用了SQL查询日志记录.通过这种方式,我可以看到这些地图的评估方式.这很有趣.首先,我得到:
SELECT host FROM sender_dependent_relayhost_map WHERE sender='foo@example.com'
如果这返回localhost:11111,我可以在该端口运行netcat,并获得传入的SMTP连接.所以这部分似乎工作得很好.
然后,我得到了类型的重复查询:
SELECT userpass FROM smtp_sasl_password_map WHERE sender=...
首先使用’foo@example.com’评估,然后(如果没有找到)使用’@ example.com'(我在文档中找不到的东西),然后,令人惊讶的是,使用从之前的sender_dependent_relayhost_map查询中找到的smtp服务器.最后用’<>‘ (可能是全球默认).
但是,如果我从第二个表返回’AK …:34 … / …'(亚马逊SES凭证),我仍然会从亚马逊获得相同的身份验证错误.所以有进步,但还没有解决方案.