私自身も同じ問題に遭遇しましたが、テキスト出力をパイプしてmailx
- Heirloom mailx 12.4 7/29/08
コマンドラインでスクリプトを実行すると、電子メールはテキスト本文の通常の電子メールとして出力されました。
ただし、メールの本文を介してまったく同じスクリプトを実行するcrontab
と、添付ファイルとして ATT00001.BIN (Outlook)、application/octet-stream (mutt)、または "noname" (Gmail) が送信されました。
これを理解するためにいくつかの調査が必要でしたが、次のようになります。
問題
Mailx は、テキスト入力で未知の文字や制御文字に遭遇した場合、それを application/octet-stream mime-type が設定された添付ファイルに変換します。
マニュアルページから:
改行と水平タブ記号以外のフォーマット文字を含むファイルの場合
したがって、これらの制御文字を削除する必要があります。これはieで実行できますtr
echo "$Output" | /usr/bin/tr -cd '\11\12\15\40-\176' | mail ...
しかし、私はノルウェー語の UTF8 文字を持っていたので: æøå - リストが拡張され、そのようなリストを維持したくないので、ノルウェー語の文字が必要です。
添付ファイルを調べると、\r、\n 32 ~ 176 の範囲の「通常の」ASCII 文字しかないことがわかりました。すべて印刷可能で、 184 および 195 --> UTF8です。
ソリューション
スクリプトでロケールを明示的に設定します。
LANG="en_US.UTF8" ; export LANG
export
シェルで実行するか、またはsetenv
実行する場合は、ロケールの設定を確認します。csh
tcsh
説明
Mailx をシェルで実行すると、LANG を .UTF8 に設定すると、UTF8 文字を正しく識別して続行します。
run in crontab
LANG が設定されておらず、デフォルトで LANG=C に設定されている場合、デフォルトでは crontab は制限された環境変数セット (システムに依存) のみを実行するためです。
mailx (または他のプログラム) はUTF8 文字を認識せず、入力に未知の制御文字が含まれていると判断します。
私の問題はUTF8文字でした。あなたの入力には他の制御文字が含まれている可能性があります。hexdump
またはで実行しますod -c
が、通常のシェルでは問題なく動作するため、LANG の問題が疑われます。
参考文献: