Linux

メール送信スクリプト

趣味でメール送信スクリプトを作成しました。正しくはwebに載っていた情報をもとに改変しただけです。

添付ファイルがあってもなくても動作するようにしました。

今回は

のページを参考にさせて頂きました。

動機

「同じ内容のメールを複数の人に(複数の)ファイルを添付して一斉にメールを送る機会があるかもしれない」と考えて、スクリプトを作成(既存のスクリプトを改変)しました。

実際には、今の所そのような機会はありません。

使用方法

send_mail.sh {toアドレス} {タイトル} {本文ファイル} [{添付ファイル名}...]

  • {本文ファイル}:メール本文を記載したファイル名を指定
  • {添付ファイル名}はなくても複数あってもよい

本文中の宛名を変える場合(差し込み印刷のような使い方)

今回はスクリプトを作成していませんが、宛名のファイル(E-メールアドレス、氏名などを記載したもの)と本文のテンプレートファイルを用意しておき、perlやRubyなどでテンプレートファイルを変更してsend_mail.shを使用すれば目的の事ができると思います。

備考

添付ファイルを送信する方法を調べた結果、以下の事が分かりました。

  • 添付ファイルのサイズよりもメール送信時に表示されるファイルサイズが大きい理由
    • Base64でバイナリーファイルをテキストファイルに変換しているためサイズが増加する。
    • wikipedia参照
  • (少なくとも)Sylpheedで添付ファイルをいくら探しても見つからなかった理由
    • Base64でテキストファイルに変換された上でメール本文に組み込まれている。
    • これはメッセージのソースを調べると確認できる。

スクリプト本体

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

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-05-06 (水) 13:55:35 (1025d)