読者です 読者をやめる 読者になる 読者になる

それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

SMTP の認証プロトコルを手作業で確認する

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 につなぐ。

コマンドの入力

接続できたら、あとはTELNETSMTP プロトコルと同じ

HELO 

で挨拶して

AUTH LOGIN

で認証を開始する。

ユーザー名とパスワードは base64エンコード

認証に必要なユーザ名とパスワードをBase64符号化したものを使って認証する。

このために、手作業でbase64エンコードするんだけど、base64 エンコードはちょっとコツが。

printf username | base64 # ⇐printで改行なし

ターミナルでやる場合は改行に注意する

echo username | base64 # ⇐これだと改行もエンコードされちゃう

だから、echo を使う場合はこうする

echo -n  username | base64 # ⇐ echo に -n をつけて改行なしでパイプに渡す

パスワードも同様にBase64 エンコードしたものを使う。

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エンコードされたパスワードとユーザー名のペア

参考資料

SMTP認証 - bnote

広告を非表示にする