「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
それは必要ではなく、送信者アドレスはとにかくハードコーディングされています。