アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも、ご指導いただき、感謝しております。
VS2005、Windows7、WindowsSocketを使ってメールソフトを作っています。

SMTP-AUTH
での、サーバーとのやり取りで、

AUTH PLAIN AH********A==
334
235 2.0.0 OK ******

のように、235の前に、334の応答があります。
送信しているデータでbase64変換したものはサンダーバードの送信しているデータと同じです。
Wireshark で見ています。
どんな理由で、334が帰ってくるのでしょうか?

教えていただければ幸いです。よろしくお願いします。


ソースコードは以下のようです。
デバッグの最中ですので、見苦しい点は勘弁してください。

sprintf( out_data, "EHLO %s\r\n",
(wanted_hostname==NULL) ? my_hostname : wanted_hostname);
if ( 0!=put_smtp_auth_line( SMTPSock, out_data, strlen (out_data) ) ) return(-1);

if ( get_smtp_auth_line() != 250 ) {//250-smtp...
smtp_error ("ESMTP server error 250");
return(-1);
}


char b64in[256]; char b64out[512];int np;
np=0;
b64in[np] = NULL;
np = np+1;
strcpy((char *)(b64in+np),oc_sender);
np = np + strlen(oc_sender);
b64in[np] = NULL;
np = np+1;
strcpy((char *)(b64in+np), oc_pop3password);
np = np+strlen(oc_pop3password);
b64in[np]=NULL;
//base64_encode(char *in, char *endin, char *out)
base64_encode(b64in, (b64in+np), (char *)b64out);

sprintf( out_data, "AUTH PLAIN %s\r\n",b64out);
if ( 0!=put_smtp_auth_line( SMTPSock, out_data, strlen (out_data) ) ) return(-1);
if ( get_smtp_auth_line() != 334 ) {//challenge value
smtp_error ("ESMTP server error");
return(-1);
}

if ( get_smtp_auth_line() != 235 ) {//OK Auth
smtp_error ("ESMTP server error");
return(-1);
}

A 回答 (1件)

AUTHコマンドに対する応答の一つです。

AUTHはチャレンジを送るための応答と認証したあとの応答の2つの応答を返します。

AUTH PLAIN AH***A==と全部くっつけてしまっていますが、本来の流れはこうです。
C: AUTH PLAIN
S: 334
C: AH********A==
S: 235 2.7.0 Authentication successful

PLAINだとわかりにくいですが、AUTH CRAM-MD5などを送ると334とともにチャレンジを送ってくれるのでなんのためにあるかわかりやすいです。
334 PDQxOTI5NDIzNDEuMTI4Mjg0NzJAc291cmNlZm91ci5hbmRyZXcuY211LmVkdT4=

詳しくはRFC4954を見てください。
http://tools.ietf.org/html/rfc4954

この回答への補足

C: AUTH PLAIN
S: 334
C: AH********A==

とすると、

S: 235 2.7.0 Authentication successful

ではなくて、500番台のエラーメッセージが帰ってきます。

なぞです。

補足日時:2012/09/17 22:59
    • good
    • 0
この回答へのお礼

ありがとうございました。
334と235のどちらが来ても対応できるように
プログラムを書き換えました。

お礼日時:2012/09/20 07:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!