Cron 作業輸出 HTML;如何以 HTML 格式傳送郵件

Cron 作業輸出 HTML;如何以 HTML 格式傳送郵件

我有一個 cron 作業,如果失敗則輸出 HTML。如果成功,則不會輸出任何內容,在這種情況下我不會收到郵件。如果它確實失敗並寫入 HTML,cron 會向我發送郵件,但它是純文字形式,很難閱讀。

我想出了兩個部分解決方案,但還沒有弄清楚如何讓它真正發揮作用。第一個是讓我的作業在輸出頂部列印 MIME 說明符,如下所示:

Mime-Version: 1.0
Content-Type: text/html
<html>...

然後我在 cron 中像這樣運行它:

my-job | sendmail my.name

主要問題是即使根本沒有文字我也會收到郵件。第二個問題是我必須將 MIME 類型行添加到我的腳本中,這對於它來說是一個錯誤的位置(不優雅,但也許可以忍受)。

然後我嘗試使用mailor mailx,它可以-E選擇在沒有文字時跳過發送:

my-job | mail -E my.name

這與 cron 預設所做的差不多。但我想不出任何方法來設定 mail/mailx 的 MIME 類型!一些線上參考資料說這是使用該-a選項完成的,但在我的系統(Fedora 16)上,採用附件文件名,而不是像其他系統上那樣的mail -a標題行。Content-Type: text/html

我不想創建臨時文件,檢查其大小等。

  • 一種使 cron 郵件以 HTML 形式可讀的方法。
  • 使 sendmail 跳過空郵件。
  • 在 mailx 中設定 MIME 類型。
  • 其他一些方法使用 Fedora 上預設安裝的不同程式。

答案1

不要在命令列上指定收件人,而是呼叫 sendmail-t並讓腳本產生to:標頭。 (您也可以subj:在處理時新增標題。)然後,當沒有輸出時,就沒有收件人,因此也沒有郵件。

答案2

最簡單的方法是在腳本中呼叫 sendmail fom。這樣您就可以控制是否要寄給您任何郵件。

或者,您可以讓腳本返回成功代碼,如果失敗僅當腳本「正確」退出時才運行 sendmail:

$ my-job >/tmp/message && cat /tmp/message | sendmail 

告訴&&bash 僅當第一個指令成功退出時才執行下一個指令(exit 0在 BASH 或exit(0)PERL 中)。透過告訴腳本在失敗時以狀態 0 退出,您將使 sendmail 命令僅在失敗時執行。

答案3

您可以如下指定內容類型:

mail -s "$(echo -e "Status Report: $HOSTNAME\nContent-Type: text/html")" "yourmail@"

相關內容