失敗した場合に HTML を出力する cron ジョブがあります。成功した場合は何も出力されず、その場合はメールは届きません。失敗して HTML が書き込まれると、cron からメールが送信されますが、プレーン テキストとして表示されるため読みにくくなります。
私は 2 つの部分的な解決策を思いつきましたが、それを本当にうまく機能させる方法はまだわかりません。1 つ目は、ジョブで次のように出力の先頭に MIME 指定子を印刷することです。
Mime-Version: 1.0
Content-Type: text/html
<html>...
次に、cron で次のように実行します。
my-job | sendmail my.name
これの主な問題は、テキストがまったくない場合でもメールが届くことです。2 番目の問題は、スクリプトに MIME タイプの行を追加する必要があることです。これは、ある意味間違った場所です (エレガントではありませんが、許容できるかもしれません)。
次に、テキストがない場合に送信をスキップするオプションがあるmail
または を使用してみました。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 を呼び出すことです。こうすることで、メールが送信されるかどうかを制御できます。
あるいは、スクリプトが成功コードを返すようにすることもできます。失敗するスクリプトが「正しく」終了した場合にのみ sendmail を実行します。
$ my-job >/tmp/message && cat /tmp/message | sendmail
&&
これは、最初のコマンドが正常に終了した場合にのみ、次のコマンドを実行するように bash に指示します ( exit 0
BASH またはPERL)。スクリプトが失敗した場合にステータス 0 で終了するように指示exit(0)
すると、sendmail コマンドが失敗した場合にのみ実行されるようになります。
答え3
コンテンツ タイプは次のように指定できます。
mail -s "$(echo -e "Status Report: $HOSTNAME\nContent-Type: text/html")" "yourmail@"