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