SMTP認証 関連ドキュメント

 base64によるエンコード演算プログラム

User ID
Password

使い方:
1. User IDにメールのユーザーIDを、Password欄にメールのパスワードを入力し、計算ボタンを押す。
    あるいは
2. 直接URLを叩く。
 http://kkch.sakura.ne.jp/hit/pc/inet/base64.cgi?uid=USERID&pwd=PASSWORD

結果
 1行目にUser ID、2行目にPassword、3行目にbase64エンコードが表示される。



 MTAと話そう〜SMTPについて 
 複数に送るときには RCPT行を複数並べる。


 認証のためのSMTPサービス拡張 http://www.puni.net/~mimori/rfc/rfc2554.txt


 各プロトコルの安全性 ふたがわ
http://rat.cis.k.hosei.ac.jp/article/security/protocol.html
SMTP AUTH (Port: 25, 587)

SMTP AUTHは、メール送信時に認証を行うことにより、送信メールサーバがスパムメールの踏み台になるのを防ぐことができる方式です。SMTP AUTHには、主に次のようなの認証方式があります。
 LOGIN
 PLAIN
 CRAM-MD5
LOGINとPLAINは、平文で通信されます。CRAM-MD5は、APOP同様、パスワードはハッシュ化されますが、それ以外のメールの内容は平文で通信されます。

SMTP AuthとPlain認証 http://snbhsmt.blog110.fc2.com/blog-entry-54.html

SMTP Authentication についてと、 実際に SMTP をしゃべって PLAIN 認証してみた。

SMTP Authentication は SMTP にユーザ認証の仕組みを追加する拡張仕様で、 RFC2554 により規定されている。 実際の認証機構には SASL が用いられる。

RFC2554 : SMTP Service Extension for Authentication
http://ftp.riken.jp/pub/internet-doc/ietf/rfc/rfc2554.txt

SMTP Auth における SMTP への拡張では、 まず
EHLO に対して 250 AUTH mechanism... が返される。 mechanism... にはそのサーバでサポートする SASL 認証方式が列挙される。複数行の回答があり、"250-"で列挙され、"250 "で終了するみた。

AUTH コマンドにて認証する。 1 行ではなく複数のやり取りに分かれても良い。
AUTH <mechanism> <argument>

認証に成功したらクライアントに 235 が返される。
誤っていれば535 が返される。

PLAIN 認証では mechanism が PLAIN、argument が "ユーザID\0ユーザID\0パスワード" という文字列を Base64 エンコードした物になる。
以下はユーザ名 user、パスワード pass の場合の argument 文字列を作成する Perl スクリプト。
$ perl -MMIME::Base64 -e 'print encode_base64("user\0user\0pass");'
dXNlcgB1c2VyAHBhc3M=

★接続例。

telnet SMTP-server 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 sturgeon.localdomain ESMTP Postfix

ehlo SMTP-server ← プロトコル開始
250-sturgeon.localdomain
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME ← 最後の行には'-'が無い。

auth plain dXNlcgB1c2VyAHBhc3M=  ← PLAINで認証。
235 Authentication successful  ← 235は成功。

あとは通常のSMTPと同じ。

quit
221 Bye
Connection closed by foreign host.

モジュールを使った送信



◎ Perl Net::SMTP でSMTP Auth

use Net::SMTP;
my $smtp = Net::SMTP->new(<SMTPサーバ>, Debug=>1);
$smtp->auth(<ユーザ名>, <パスワード>);
$smtp->mail(<メールアドレス>);
$smtp->to(<メールアドレス>);
$smtp->data();
$smtp->datasend(<Form:とかTo:とかSubject:とか>);
$smtp->datasend(’\n’);
$smtp->datasend(<メール本文>);
$smtp->dataend();
$smtp->quit;