我不明白为什么我的 AWS EC2 ( Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)
) 上的 cron 似乎无法通过 sSmtp 将电子邮件发送到 AWS SES。
这有效:我收到了来自本地用户的电子邮件。echo "test" | ssmtp [email protected]
这有效:我收到了一封来自 root 的电子邮件。echo "test" | sudo ssmtp [email protected]
但是,当 cron 运行并尝试发送电子邮件时,我什么也没收到,并且系统日志中会出现以下内容:sSMTP[14608]: 554 Transaction failed: Missing final '@domain'
或有时:554 Transaction failed: User name is missing: 'Cron Daemon <root>'
。
cron 试图以谁的身份发送电子邮件?我原以为是root
。
在 /etc/crontab 中:
MAILTO="[email protected]"
(我也尝试过MAILTO=root
)
/etc/ssmtp/revaliases:
root:[email protected]:email-smtp.us-east-1.amazonaws.com:465
me:[email protected]:email-smtp.us-east-1.amazonaws.com:465
/etc/ssmtp/ssmtp.conf:
[email protected]
mailhub=email-smtp.us-east-1.amazonaws.com:465
rewriteDomain=myemail.com
hostname=myemail.com
#UseSTARTTLS=YES
UseTLS=YES
AuthUser=XXXXXXXXXXXXXXXXX
AuthPass=XXXXXXXXXXXXXXXXX
AuthMethod=LOGIN
FromLineOverride=YES
根据一些谷歌搜索,它MAILFROM=
似乎在 Ubuntu 上不起作用,并且更改它似乎没有效果(从根 cron 和我的本地用户 cron)。
我感到困惑和迷茫。sSmtp 似乎没有任何调试选项来帮助了解 cron 电子邮件来自谁、发往谁以及查看标题。
该服务器的安装非常小,我不想postfix
仅仅为了每天发送 10 封电子邮件(主要是日志文件)而安装。
谢谢!
答案1
因此,afaict SES 要求“发件人”和“收件人”字段中都包含域。
虽然MAILFROM=
Ubuntu 的 cron 不支持,FromLineOverride=NO
但您可以在 ssmtp.conf 中设置,ssmtp 将强制“发件人”地址为“root@hostname”,而不仅仅是“root”。这样就可以处理“发件人”地址。
现在 - 您还需要确保“收件人”地址有域名(默认情况下也只是“root”)。可以通过[email protected]
在 /etc/crontab 中添加一行来解决此问题。
这解决了我的“554 事务失败:缺少最后的‘@domain’”问题。我没有遇到您的“事务失败:缺少用户名:‘Cron Daemon’”消息,因此我无法对此发表评论。
所有这些的关键点是Debug=YES
在 ssmtp.conf 中将一堆信息写入系统日志。