[bash] CentOS添付ファイル付きメール送信(sendmail)の実装

  • 16
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

添付ファイル付きメールの実装

この実装が正解という訳ではありませんが、

uuencodeコマンドを使いたくなかった。
echo でメールヘッダを作りたくなかった。

というところだけは、守りましたw

環境

  • CentOS release 6.3
  • sendmail-8.14.4-8.el6.x86_64

実装

  • そんな難しいことはしてません。シンプルに。
#/bin/sh

# commands.
SENDMAIL=/usr/lib/sendmail
ECHO=/bin/echo
GZIP=/bin/gzip
CAT=/bin/cat
RM=/bin/rm

# attachment file info.
ATTACH_FILE=attachmail.txt
ATTACH_PATH=/tmp/$ATTACH_FILE

# mail head settings.
MAIL_BODY=/tmp/mail_body.txt
MAIL_FROM=xxx@abc.com
MAIL_TO=yyy@abc.com
MAIL_SUBJECT="TEST ATTACHMENT MAIL."
MAIL_BOUNDARY=`date +%Y%m%d%H%M%N`

# make attachment file (test data).
$ECHO "1,2,3,4,5" > $ATTACH_PATH
$ECHO "6,7,8,9,10" >> $ATTACH_PATH

# attachment compression.
cd /tmp
$GZIP $ATTACH_FILE

#make body.
$ECHO "this is Body." > $MAIL_BODY

# send mail.
$SENDMAIL -t << EOF
From: ${MAIL_FROM}
To: ${MAIL_TO}
Subject: ${MAIL_SUBJECT}
MIME-Version: 1.0
Content-type: multipart/mixed; boundary=${MAIL_BOUNDARY}
Content-Transfer-Encoding: 7bit

--${MAIL_BOUNDARY}
Content-type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

`${CAT} ${MAIL_BODY}`

--${MAIL_BOUNDARY}
Content-type: application/zip;
 name=${ATTACH_FILE}.gz
Content-Transfer-Encoding: base64
Content-Disposition : attachment;
 filename=${ATTACH_FILE}.gz

`${CAT} ${ATTACH_PATH}.gz | base64`

--${MAIL_BOUNDARY}--
EOF

$RM -fr ${ATTACH_PATH}.gz

以上です。