smtpサーバーにtelnet でアクセスで、ログインを確認する
220 iemsa300501.mailsv.softbank.jp ESMTP server ready Thu, 12 Mar 2015 19:05:54 +0900 HELO 250 iemsa300501.mailsv.softbank.jp AUTH LOGIN 334 VXNlcm5hbWU6 XXXXXXX== 334 UGFzc3dvcmQ6 XXXXXXXX== 235 Authentication successful
AUTH には数種類ある。
AUTH PALIN AUTH LOGIN AUTH CRAM-MD5
一般的には、 AUTH LOGIN でいいんじゃないかと思うんですね。
サーバーへのつなぎ方
openssl の s_client を使います。
openssl s_client -connect smtp.softbank.jp:465
いまどき、telnet でつなぐのもムリだろうし、SSL非対応のSMTPサーバーも珍しいので、殆どの場合 openssl で ポート 465 につなぐ。
コマンドの入力
接続できたら、あとはTELNETの SMTP プロトコルと同じ
HELO
で挨拶して
AUTH LOGIN
で認証を開始する。
ユーザー名とパスワードは base64 でエンコード
認証に必要なユーザ名とパスワードをBase64符号化したものを使って認証する。
このために、手作業でbase64 でエンコードするんだけど、base64 エンコードはちょっとコツが。
printf username | base64 # ⇐printで改行なし
ターミナルでやる場合は改行に注意する
echo username | base64 # ⇐これだと改行もエンコードされちゃう
だから、echo を使う場合はこうする
echo -n username | base64 # ⇐ echo に -n をつけて改行なしでパイプに渡す
AUTH LOGINの例
AUTH LOGIN #⇐入力 334 VXNlcm5hbWU6 XXXXXXX== #<-- ユーザ名のbase64 334 UGFzc3dvcmQ6 XXXXXXXX== #<-- パスワードのbase64 235 Authentication successful
AUTH PLAIN の例
auth plain の場合は、"USERNAME\0USERNAME\0PASSWORD" の形式になる
これをコマンド作るのはちょっとコツが要る
echo -ne 'takuya_1st\0takuya_1st\0password' | base64
このように \0 の NULL文字を入れてやる。
実際の結果がこちら
220 iemsa400501.mailsv.softbank.jp ESMTP server ready Thu, 12 Mar 2015 19:18:13 +0900 HELO #⇐入力 250 iemsa400501.mailsv.softbank.jp AUTH PLAIN #⇐入力 334 XXXXXXXXXXXXXXXXXXXXXXXXXX== #<-- ユーザ名NULLユーザ名NULLパスワードのbase64 235 Authentication successful 421 iemsa400501.mailsv.softbank.jp Lost connection to [112.70.114.141] read:errno=0
伏せ字の部分がBase64エンコードされたパスワードとユーザー名のペア