Linuxからmailコマンドでメールすると添付ファイルになる現象

お客様のシステム環境を新しい Linux(CentOS)サーバーに移行作業を行いました。

移行後、cronで起動されるバックアップ処理の最後に、以下のようなログファイルの内容をmailコマンドでメール送信すると、メールが添付ファイルになってしまうという現象が発生しました。


cat $LOG_FILE | nkf -j | mail -s "BACKUP DONE" xxxxx@gmail.com

CentOS6.x 以降でメール件名または文中に非ascii文字(日本語)が含まれている場合にそうなってしまうとのことです。
以下の記事を参考に対応を検討しました。


CentOS 6.xのmailコマンドでメールを送信すると添付ファイルになる場合の対処 – nmtysh.log



mailx コマンドで日本語を本文に入れると添付ファイルになってしまう? : 自作自演

今回、メール送信処理は 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 変換を外すことで、日本語を添付ファイルにならずに送信することができました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です