cron処理結果を、subjectを日本語にしてメールする方法

cron処理結果を、subjectを日本語にしてメールする方法Web開発者の備忘録cron で動かしたものが吐き出す「標準出力/エラー出力」は、普通はその処理を動かしたユーザにメールされます。

※crontab に MAILTO=user というように1行書けばそのアドレスに飛ぶようになります

ここでは、そういった設定はなく、 crontab1行毎にメール送信先を変えたい場合や、subjectを付けたい、しかも日本語で、みたいなことをするにはどうすればよいか、を簡単にですが書きたいと思います。

共用サーバ(レンタルサーバ)のコントロールパネルなどを使ってcron登録する場合でも使える方法です。

まずは、ずばり記述例です

/usr/bin/php /path/to/script.php | nkf -j | mail -s `echo ‘日本語タイトル’ | nkf -jM` 送信先メールアドレス[ 送信先メールアドレス2・・・・]

最初の「/usr/bin/php /path/to/script.php」は動かしたい処理です。

次のパイプに続く「nkf -j 」は、処理結果(標準出力)をJISに変換する処理。

さらに次のパイプに続く「mail -s `echo ‘日本語タイトル’` | nkf -jM`」は、
1.echo ‘日本語タイトル’でまず日本語を出力
2.それをnkf -jM で JISコード化&MIMEエンコード化(base64エンコード:日本語を7bit化しないといけないんです)
3.それをmail -s の引数にしている
ということをしています。

最後の送信先メールアドレスは、mail コマンドの引数の続きになります。1つに限らず複数入れることができます。

注意点ですが。
日本語タイトルは、せいぜい15文字くらいにおさめてください。
※厳密に言うと、「Subject: nkf -jM(MIMEエンコード)の結果」で表現されるテキストが確か76文字を超えないようにしないといけません。とってもややこしい話になるのでここでは詳しく書きませんが、それより長い文字列にしようとするのであれば、改行をするための記述が別途必要になるのです。メールってめんどいんです。
もしくは、先に日本語を15文字くらい書いて、後は全部半角テキスト(アルファベット)にするとかですね。この場合は76文字超えた分もメーラが適切に処理してくれます。