Cronで日本語のメールを送ると文字化け・添付ファイルになる

日本語の文字列があるメールを送ると添付ファイルなる場合の対処法

件名は日本語でメール本文に日本語文字列があるメールを送信するシェルスクリプトを作って、スクリプトを実行してメールを送信すると受信したメールの件名・本文ともメールクライアントでは、日本語で表示されますが、そのスクリプトをCronで実行すうると、メール件名は「????」と文字化けしメール本文は添付ファイルとなってしまいます。

これはCronで実行するとロケール環境変数がスクリプトで実行している環境のユーザーと異なるためになります。
シェルスクリプトで「locale」コマンドを実行するような簡単なスクリプトを作って実行してみました

作成したシェルスクリプトを実行すると「LANG=en_US.UTF-8LC_CTYPE=ja_JP.UTF-8」となっています。

このシェルスクリプトをCronで実行すると下記のようなロケール環境変数になります

Cronで実行した場合は「LANG=LC_CTYPE="POSIX"」となり、ユーザーで実行したシェルスクリプトを実行した場合と異なり「LANG=」と空白となっており、そのため日本語文字列を含むメールが添付ファイルになったりするようです

ネットで調べるとシェルスクリプトを実行する際に「export LC_CTYPE=ja_JP.UTF-8」、「export LANG=ja_JP.UTF-8」と「export」コマンドで日本語のロケール環境変数を指定してシェルスクリプトに記載すると日本語文字列を含む場合も添付ファイルにならずにメールを送れるようです。

確認のため以下のようなシェルスクリプトを作ってCronで実行しました

実行するとロケール環境変数を日本語に指定している場合は、日本語文字列を含むメールは普通のメールのように日本語は文字化けせず本文も添付されることなく送信できました

また、exportコマンドでロケール環境変数を指定した際に環境変数がどのようになっているか調べると下記のようになっています

 

スポンサーリンク