SMTP認証

メモ:

SMTP認証とは、メールを送信するためのプロトコルにユーザー認証機能を追加したものです。

枠組みは、RFC2554を参照してください。

SMTPのコマンドであるHELOではなく、新たに追加されたEHLOを使うことでSMTPサーバーがどんな認証方法に対応しているかを知ることが出来ます。

たとえば、telnetを使用してSMTPサーバーに接続しEHLOコマンドを送ってみます。

c:\> telnet xxx.xxx.xxx.xxx 25
220 xxxxxxxxxx ESMTP Sendmail

EHLO localhost

250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH PLAIN LOGIN
250-DELIVERBY
250 HELP

上記例の場合、PLAINとLOGINに対応していることがわかります。

AUTH PLAIN認証

AUTH PLAIN認証は、SMTPサーバーに対して「AUTH PLAIN」コマンドを送ります。 認証に使用する文字列は、「UserID\0UserID\0Password」をBase64でエンコードして送ります。

-> AUTH PLAIN
<- 334
-> ASFasasERWcr=
<- 235 

AUTH LOGIN認証

AUTH LOGIN認証は、SMTPサーバーに対して「AUTH LOGIN」コマンドを送ります。 その後、ユーザー名とパスワードをBase64でエンコードして送ります。

-> AUTH LOGIN
<- 334 VXNlcm5hbWU6
-> エンコードしたユーザーID
<- 334 UGFzc3dvcmQ6
-> エンコードしたパスワード
<- 235

サーバーから返される334に続く文字列は、「Username:」と「Password:」をBase64でエンコードしたものです。

AUTH CRAM-MD5認証

AUTH CRAM-MD5認証は、SMTPサーバーに対して「AUTH CRAM-MD5」コマンドを送ります。 「AUTH CRAM-MD5」を送るとサーバーからBase64でエンコードされたタイムスタンプが送られてきます。

タイムスタンプをBase64でデコードし、パスワードをキーにMD5ダイジェストを作成します。

作成した16進文字列の前にユーザーIDを連結しBase64でエンコードした文字列をサーバーへ送信します。

-> AUTH CRAM-MD5
<- 334 xxxxxxxxxxxx
-> 作成した文字列
<- 235