メール送信スクリプト †趣味でメール送信スクリプトを作成しました。正しくはwebに載っていた情報をもとに改変しただけです。 添付ファイルがあってもなくても動作するようにしました。 今回は のページを参考にさせて頂きました。 動機 †「同じ内容のメールを複数の人に(複数の)ファイルを添付して一斉にメールを送る機会があるかもしれない」と考えて、スクリプトを作成(既存のスクリプトを改変)しました。 実際には、今の所そのような機会はありません。 使用方法 †send_mail.sh {toアドレス} {タイトル} {本文ファイル} [{添付ファイル名}...]
本文中の宛名を変える場合(差し込み印刷のような使い方) †今回はスクリプトを作成していませんが、宛名のファイル(E-メールアドレス、氏名などを記載したもの)と本文のテンプレートファイルを用意しておき、perlやRubyなどでテンプレートファイルを変更してsend_mail.shを使用すれば目的の事ができると思います。 備考 †添付ファイルを送信する方法を調べた結果、以下の事が分かりました。
スクリプト本体 †send_mail.sh #!/bin/bash ############################ ## メール添付ファイルスクリプト ## コマンドラインから添付付きメールを送信するスクリプトです。 ## ## send_mail.sh {toアドレス} {タイトル} {本文ファイル} [{添付ファイル名}...] ## ############################ ## Init section from_addr='(送信者のメールアドレス)' to_addr=$1 subject=`echo $2 | nkf -w -Lu` mail=`cat $3 | nkf -w -Lu` shift; shift; shift boundary=`date +%Y%m%d%H%M%N` ## generate MIME encoded mail echo "From: $from_addr" > .MIME_MAIL.tmp echo "To: $to_addr" >> .MIME_MAIL.tmp echo "Subject: $subject" >> .MIME_MAIL.tmp echo "MIME-Version: 1.0" >> .MIME_MAIL.tmp echo "Content-type: multipart/mixed; boundary=\"----$boundary\"" >> .MIME_MAIL.tmp echo "Content-Transfer-Encoding: 7bit" >> .MIME_MAIL.tmp echo "" >> .MIME_MAIL.tmp echo "This is a multi-part message in MIME format." >> .MIME_MAIL.tmp echo "" >> .MIME_MAIL.tmp ## Insert MAIL_BODY (if you need) echo "------$boundary" >> .MIME_MAIL.tmp echo "Content-type: text/plain; charset=utf-8" >> .MIME_MAIL.tmp echo "Content-Transfer-Encoding: 7bit" >> .MIME_MAIL.tmp echo "" >> .MIME_MAIL.tmp echo "$mail" >> .MIME_MAIL.tmp echo "" >> .MIME_MAIL.tmp ## Attach file to E-Mail while [ $# -ge 1 ] ; do attach_file=$1 filename=`echo $attach_file | sed -e "s/.*\/\(.*$\)/\1/"` content_type=`file --mime $attach_file | cut -d' ' -f2` echo "------$boundary" >> .MIME_MAIL.tmp echo "Content-type: $content_type" >> .MIME_MAIL.tmp echo " name=$filename" >> .MIME_MAIL.tmp echo "Content-Transfer-Encoding: base64" >> .MIME_MAIL.tmp echo "Content-Disposition : attachment;" >> .MIME_MAIL.tmp echo " filename=$filename" >> .MIME_MAIL.tmp echo "" >> .MIME_MAIL.tmp cat $filename | base64 >> .MIME_MAIL.tmp echo "" >> .MIME_MAIL.tmp shift done echo "------$boundary--" >> .MIME_MAIL.tmp ## Send E-Mail /usr/sbin/sendmail -i $to_addr < .MIME_MAIL.tmp ## Delete TEMP file rm -f .MIME_MAIL.tmp exit 0 |