2013-03-06 100 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郵件到我的電子郵件帳戶。