我正在尝试使用 Amazon SES 作为我的 EC2 Ubuntu“精确”服务器的 SMTP 网关,对不同的原始电子邮件域使用不同的 SES 账户。postfix 文档似乎暗示这是可能的,但 SES 总是声称我使用了错误的凭据(“535 身份验证凭据无效”)。如果我通过中继主机指令将所有电子邮件路由到同一个 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_密码映射:
/.*@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 映射,并打开 SQL 查询日志记录。这样我就可以看到这些映射是如何评估的。这有点有趣。首先,我得到了:
SELECT host FROM sender_dependent_relayhost_map WHERE sender='[email protected]'
如果返回 localhost:11111,我可以在该端口运行 netcat,并获取传入的 SMTP 连接。因此,这部分似乎运行良好。
然后,我收到了以下类型的重复查询:
SELECT userpass FROM smtp_sasl_password_map WHERE sender=...
首先用'[电子邮件保护]',然后(如果未找到)使用'@example.com'(这不是我在文档中找到的内容),然后,令人惊讶的是,使用从以前的 sender_dependent_relayhost_map 查询中找到的 smtp 服务器。最后使用'<>'(大概是全局默认值)。
但是,如果我从第二个表返回“AK...:34.../...”(Amazon SES 凭证),我仍然会收到来自 Amazon 的相同身份验证错误。因此,虽然取得了进展,但尚未解决。
答案1
我怀疑正则表达式不知何故失败了。您可以尝试以下将 user:pass 与中继主机绑定的操作。
在 /etc/postfix/sasl_pass 中
[email-smtp.us-east-1.amazonaws.com] AKAAAA:AAAAAAAAA
/etc/posfix/main.cf
smtp_sasl_password_maps = hash:/etc/postfix/sasl_pass
您当然需要运行 sudo postmap /etc/postfix/sasl_pass(或您使用的任何文件名称)。
答案2
对于 postfix 中具有“AK...:34.../...”的 sasl 凭证,您需要使用 SMTP 用户名和密码,而不是 AWSAccessKeyId 和 AWSSecretKey。
请参阅“获取您的 Amazon SES SMTP 凭证”http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html
答案3
重要提示。每个地区只能有一个 SES SMTP 帐户。
情况并非总是如此,我们有两个 SMTP 帐户。最近刷新权限不起作用,直到我删除了这两个帐户并重新创建它。