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やパスワードがデコードできなきので、セキュリティが高い方式です。
まずは、サーバーに【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やパスワードがデコードできなきので、セキュリティが高い方式です。
コメント