SMTPサーバの接続確認をする際、テストメールを送信することがあります。
最初のうちはtelnetコマンドを手で叩いて確認してましたが、だんだん面倒になってきたので、シェルスクリプト化してみました。
内部ではncコマンドを叩いているので、ncがない場合別途インストールしてください。
base64のエンコードはこのあたりからどうぞ。
bash=mail.sh
#!/bin/bash
host=メールサーバホスト
port=ポート番号(25、465、587とか)
user=SMTP認証のユーザ名(base64エンコードしたもの)
pass=SMTP認証のパスワード(base64エンコードしたもの)
to=宛先メールアドレス
from=送信元メールアドレス
function mail_input {
echo "EHLO localhost"
sleep 1
echo "auth login"
echo "$user"
echo "$pass"
echo "mail from: $from"
echo "rcpt to: $to"
echo "data"
echo "To: $to"
echo "From: $from"
echo "Subject: Hello Mail Server"
echo ""
echo "test mail"
echo "."
echo "quit"
}
# send
mail_input | nc $host $port
実行権限を与えて実行!
$ chmod +x mail.sh
$ ./mail.sh
実行結果
$ ./mail.sh
220 hostname ESMTP Postfix
250-hostname
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
334 xxxxxxxx
334 xxxxxxxx
235 2.7.0 Authentication successful
250 2.1.0 Ok
250 2.1.5 Ok
354 End data with <CR><LF>.<CR><LF>
250 2.0.0 Ok: queued as AFBEE10A9C52
221 2.0.0 Bye
SMTP認証が不要な場合、auth login、$user、$passの3行を削ればOK。