メールで複数のテキスト添付ファイルを送信

メールで複数のテキスト添付ファイルを送信

「Red Had Enterprise Linux Serverバージョン5.11(Tikanga)」でこのスクリプトを実行します。

電子メールはバージョン8.1 6/6/93(古いように見えます)です。

いろいろ試してみましたが、うまくいかないようです。

echo "Email message" | mail -a /home/user/checks/notprocessed.txt -a /home/user/checks/dirlist.txt -s "Subject" [email protected] /home/user/checks

結果メッセージ:

メール:無効なオプション - a

muttはまだインストールされておらず、このシステムは私が働いている会社が所有しているため、システムへのアクセスが制限されています。他のコンポーネントを追加することもできますが、変更管理と関連プロセスを経なければなりませんでした。

uuencodeも使用できません。

これが私が今日使っているものです。 2番目のファイルを追加しようとしています。

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt /home/user/checks/dirlist.txt

   exit -20
fi

そして.. /home/user/checks/dirlist.txtは電子メールに添付または含まれません。 /home/user/checks/dirlist.txtが実際に添付ファイルであることを願っています。

これは実際には機能しますが、電子メールの本文にnotprocessed.txtが含まれています。

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt

   exit -20
fi

ベストアンサー1

標準入力リダイレクト()を実行する<と、最初のファイル(最初のファイルのみ)が開き、その内容が本文としてmail標準入力に渡されます。

実装が古いため、MIME添付ファイルを生成するための現在のバージョンのフラグはmailxサポートされていません。-aあなたができることは、利用可能なものを使用してMIME形式を直接作成することです。

幸いなことに、単純なbashスクリプトを使用することはそれほど難しくありません(RHEL 5でも100%動作すると確信しています:-)。次のように簡単に実行できます。

#!/bin/bash
msgid="$RANDOM$RANDOM$RANDOM$RANDOM"
to="$1"
shift
subject="$1"
shift
echo "To: $to"
echo "From: [email protected]"
echo "Subject: $subject"
echo "Message-ID: $msgid"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=$msgid"
echo "" # header termination
while [ -n "$1" ]; do 
    echo "--$msgid"
    echo "Content-Type: text/plain; charset=UTF-8"
    echo "Content-Disposition: attachment; filename=\"$(basename $1)\""
    echo "Content-Transfer-Encoding: base64"
    echo ""
    base64 < "$1"
    shift
done

その後、送信用に生成された電子メールテキストをsendmail次のように送信します。

mail.sh "$SUBJECT" "$EMAIL" /home/user/checks/notprocessed.txt \
   /home/user/checks/dirlist.txt | sendmail -t

スクリプトはbase64「ASCII Armor」ファイルのコマンドを使用するため、テキストファイルとバイナリファイルの両方を送信できますが、テキストファイルを送信しない場合は、添付ファイルを正しく設定する方法を調べることをお勧めしますContent-type(またはすべて次に変更)。application/octet-stream(つまり、「バイナリ」です。)このコマンドはRHEL 5のcoreutilsの一部として提供されるため、使用に問題はないと予想されます。

また、この-tフラグを使用すると、MTAはメッセージ自体からのみ電子メールエンベロープを読み取ることができるため、コマンドパラメータに他のエントリを追加するsendmail必要はありません。sendmailスクリプトに出力に必要なすべてのフィールドが含まれていることを確認してください。コマンドラインで受信者と件名をこのように読み取るようにしましたが、mailxそれは必要ではなく、送信者アドレスはとにかくハードコーディングされています。

おすすめ記事