SMTPコマンドでメール送信¶
- 次のシェルスクリプトを作成
vi mail.sh -------------------- #!/bin/bash HOST="接続先ホスト名" PORT="接続先ポート番号" EHLO="`hostname`" SUBJECT="`date '+%Y-%m-%d_%H-%M-%S-%N'`" MSG_ID="`date '+%Y-%m-%d_%H-%M-%S-%N'`@`hostname`" FROM="FROMに設定するメールアドレス" TO=$1 CC=$2 #################################### if [ -z ${TO} ]; then echo 'mail.sh <to mail@example.com>' exit fi exec 3<>/dev/tcp/$HOST/$PORT wait(){ while true do read line <&3 echo "$line" if [[ "$line" == $1 ]] then break fi done } wait "[1-9]*" echo EHLO ${EHLO} >&3 wait "[1-9]*" echo MAIL FROM: ${FROM} >&3 wait "[1-9]*" echo RCPT TO: ${TO} >&3 wait "[1-9]*" echo DATA >&3 echo FROM: ${FROM} >&3 echo TO: ${TO} >&3 if [ -n "${CC}" ]; then echo CC: ${CC} >&3 fi echo Message-ID: \<${MSG_ID}\> >&3 echo Subject: ${SUBJECT} >&3 echo Message-ID is >&3 echo \<${MSG_ID}\> >&3 echo . >&3 wait "[1-9]*" echo QUIT >&3 echo Message Sent : ${SUBJECT}
- 次の書式でコマンドを実行
sh mail.sh 宛先のメールアドレス (CC先のメールアドレス)
補足¶
- 次のメッセージでメールが送信できない場合
501 Syntax: EHLO hostname 250 2.1.0 Ok 250 2.1.5 Ok 354 End data with <CR><LF>.<CR
- 名前解決ができるか確認する
dig `hostname`
- できない場合、DNS正引き登録を行うか、hostsにhostnameを記載する
vi /etc/hosts -------------------- 192.168.0.xx mail mail.example.com
- または、EHLOの変数内容を空白にすることで送信できることもある
EHLO=""
- または、EHLOの変数内容を空白にすることで送信できることもある
- 自分自身に向けては以下のエラーで実行ができないので注意。
warning: Illegal address syntax from localhost[127.0.0.1] in MAIL command: user@example.com warning: non-SMTP command from localhost[127.0.0.1]: FROM: user@example.com
- 実行時、最後に表示される『Message Sent : ……』に基づいた件名のメールが送信される。