お客様のシステム環境を新しい Linux(CentOS)サーバーに移行作業を行いました。
移行後、cronで起動されるバックアップ処理の最後に、以下のようなログファイルの内容をmailコマンドでメール送信すると、メールが添付ファイルになってしまうという現象が発生しました。
cat $LOG_FILE | nkf -j | mail -s "BACKUP DONE" xxxxx@gmail.com
CentOS6.x 以降でメール件名または文中に非ascii文字(日本語)が含まれている場合にそうなってしまうとのことです。
以下の記事を参考に対応を検討しました。
今回、メール送信処理は csh で書いていますので、ロケールの設定を setenv で指定しました。(なお、今回の環境はEUCの為、実際は ja_JP.eucJPとしました)。
設定するのは「LANG」ではなく「LC_CTYPE」になります。
C系シェル(csh, tcsh 等)の場合:
setenv LC_CTYPE ja_JP.utf8
B系シェル(bash等)の場合:
export LC_CTYPE=ja_JP.utf8
この対応だけですと、まだ添付ファイルになってしまいます。
そこで、「cat -v」としたのですが添付ファイルにならずメール本文にログの内容が載るのですが、日本語が「M-<M-+M-%M-5M-!M-<M-%M-PM…」というように化けてしまいます。
試行錯誤の上、最終的にメール送信の際に、nkf で jis に変換していたのを外して以下のようにすると、添付ファイルにならず、メール本文で日本語も化けずに送信できました。
cat $LOG_FILE | mail -s "BACKUP DONE" xxxxx@gmail.com
まとめると、LC_CTYPE をシェル内で設定することと、jis 変換を外すことで、日本語を添付ファイルにならずに送信することができました。