2013-03-06 120 views
2

我有一个crontab,包括一个[email protected]。我的服务器使用msmtp将电子邮件转发到Amazon Simple Email Service。我的问题是,cron命令的输出永远不会到达我的邮箱。这就是msmtp在日志中说:通过msmtp的Crontab电子邮件 - >亚马逊SES

3月6 14点26分02秒主机= email-smtp.us-east-1.amazonaws.com TLS =上将auth =用户=从MY.SES.USER = [email protected] [email protected] smtpstatus = 554 smtpmsg ='554交易失败:用户名缺失:?Cron守护进程?'。 errormsg ='服务器不接受邮件'退出代码= EX_UNAVAILABLE

为了让Amazon SES接受cron电子邮件,我需要做些什么?

+0

您是否使用通过亚马逊控制台生成的SMTP凭证?您是否从**验证的电子邮件帐户发送**?你在沙箱或生产SES?如果在沙箱中:您是否将**发送至**已验证的电子邮件帐户? – Viccari 2013-03-06 17:22:57

+0

是的,我使用提供的SMTP凭据,并且在通过PHP发送电子邮件时它们工作正常。发件人地址和地址相同 - 它们具有经过SES验证的域名(并且它通过PHP工作)。你碰巧知道我在哪里可以找到电子邮件的完整来源?现在我只能看到日志中的短消息。 – jbsteel 2013-03-07 10:43:23

+0

我不......我建议在亚马逊开发者论坛上发布您的问题。 – Viccari 2013-03-07 11:12:37

回答

3

AWS Developer Forums所建议的解决方案:

原来,cron的具有“从”地址硬编码源(在cron的源QV“do_command.c”),所以一个不不会影响cron发送给sendmail(在我们的例子中符号链接到“/ usr/bin/msmtp”)。

但是,由于Linux的神奇,我们确实有能力改变发送到sendmail的文本流。

我解决这个cron的限制的工作方式是移动的 “msmtp在” 二进制 “msmtp.bin” 再制造 “的/ usr/bin中/ msmtp会”,这是一个shell脚本:

#! /bin/bash 
sed -e 's/root .Cron Daemon./[email protected]/' | /usr/bin/msmtp.bin "[email protected]" 

这也是AFAIK,当用于“全局”设置(例如cron或其他使用不受控制的参数调用sendmail的情况下)时,必须将“调试”标志设置为msmtp的唯一方法。

尽管上面的脚本过于简单,但您也可以通过检查魔术“-FCronDaemon”的输入参数来有条件地修改文本,该魔术也是在cron二进制文件中进行硬编码的。如果有其他程序使用“-FCronDaemon”调用sendmail,我会惊呆了。

1

本来完全一样的问题,但答案上面并没有为我工作,所以这是我没有...

由于问题是独立于cron和符号链接sendmail来msmtp在作品在其他地方,我不想全局更改全局的msmtp命令。所以我首先创建了/usr/bin/msmtp_cron.bin并使其可执行。

接下来我不得不告诉cron来使用它作为其邮件路径,通过编辑/ etc/SYSCONFIG/crond的阅读:

CRONDARGS="-m '/usr/bin/msmtp_cron.bin -t'" 

然后不忘重启crond的(单独重装是不够的) :

$ sudo systemctl restart crond.service 

返回到/ usr/bin/msmtp_cron。仓,在这个文件中,我首先要找出什么cron的实际分流到sendmail的/ msmtp会知道我可以做什么替代:

sed '' > /tmp/cron-mail-capture.txt 

这产生这些标题:

From: "(Cron Daemon)" <root> 

这是略从对方的回答不同,所以我的sed脚本最终看上去就像这样:

sed -e 's/..Cron Daemon.* <root>/[email protected]/' | /usr/bin/msmtp -t "[email protected]" 

现在,它成功地将通过AWS SES的cron邮件到我的电子邮件帐户。