PHPコーディング

SMTPソケットをオープンしてメール送信(CRAM-MD5認証)

2010年01月24日
今日はsmtp認証の中の【CRAM-MD5】方式です。

まずは、サーバーに【CRAM-MD5】方式で認証を行うことを通知します。
@fputs($sock, "AUTH CRAM-MD5\r\n");

成功すると、サーバーは認証に使うキーを返してきます。
$line = @fgets($sock, 128);
キーは、【334 キー】の形式で返ってくるので、【334 】を取り除きます。
$key = str_replace("334 ", "", $line);

この方式は
Base64エンコード(ユーザ名+空白1文字+サーバーからのキーをパスワードをキーとしてMD5ダイジェストした値)
を認証に用います。

$ninsyo = base64_encode($id.' '.hash_hmac('md5', $key ,$pw));
で認証用文字列が得られます。


次に、得られた文字列で認証です。
@fputs($sock, $ninsyo."\r\n");
$result = @fgets($sock, 128);
成功していたら、【235 ・・・】が返ってきます。


この方式は、IDやパスワードがデコードできなきので、セキュリティが高い方式です。