libetpan ライブラリと以下のコードを使用して、Google サーバー経由でメールを送信しようとしています。ただし、mailsmtp_auth を実行すると、16 (MAILSMTP_ERROR_AUTH_NOT_SUPPORTED) が返されます。理由はありますか?同じライブラリを使用して IMAP は問題なく動作していますが、SMTP は何らかの理由でうまくいきません。オンラインで多くのサンプルを見つけましたが、どれも Gmail では機能しないようです。
int ret;
mailsmtp *smtp = NULL;
mailstream_low * low;
int fd;
mailstream_low * new_low;
char smtp_server[100] = "smtp.gmail.com";
char smtp_user[100] = "user";
char smtp_pass[100] = "password";
char smtp_email[100] = "user@gmail.com";
char body[100] = "Test email";
if ( (smtp = mailsmtp_new(0,NULL)) == NULL ){
return FALSE;
}
if ( (ret = mailsmtp_socket_connect(smtp, smtp_server, 587) != MAILSMTP_NO_ERROR ) ){
fprintf(stderr, "mail_socket_connect: %s\n", mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
ret = mailesmtp_ehlo(smtp);
if (ret != MAIL_NO_ERROR) {
fprintf(stderr, "mailsmtp_helo: %s\n", mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
ret = mailesmtp_starttls(smtp);
if ( ret != MAIL_NO_ERROR ) {
fprintf(stderr, "mailsmtp_starttls: %s\n", mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
// THIS IS WHERE THE ERROR OCCURS
ret = mailsmtp_auth(smtp, smtp_user, smtp_pass);
if ( ret != MAIL_NO_ERROR ) {
fprintf(stderr, "mailsmtp_auth: %s\n", mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
ret = mailsmtp_mail(smtp, smtp_email);
if ( ret != MAIL_NO_ERROR ) {
fprintf(stderr, "mailsmtp_mail: %s\n",mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
ret = mailsmtp_rcpt(smtp, smtp_email);
if ( ret != MAIL_NO_ERROR ) {
fprintf(stderr, "mailsmtp_rcpt: %s\n",mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
ret = mailsmtp_data(smtp);
if ( ret != MAIL_NO_ERROR ) {
fprintf(stderr, "mailsmtp_data: %s\n", mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
ret = mailsmtp_data_message(smtp, body, strlen(body));
if (ret != MAIL_NO_ERROR ) {
fprintf(stderr, "mailsmtp_data_meassage: %s\n", mailsmtp_strerror(ret) );
mailsmtp_free(smtp);
return FALSE;
}
return TRUE;
--------------------------------------
[編集 #1]: SASL
--------------------------------------
libetpan のソースを編集し、そのコード ベースで Win32 に関するいくつかの問題を修正することで、これをほとんど機能させることができました (100% 機能するようになったら、結果を投稿します)。ただし、Gmail には SASL が必要なようです。Windows (Visual Studio 2010) でコンパイルするときに SASL サポートを libetpan に含めるためのドキュメントはありません。Windows 固有の情報をオンラインで見つけるのに苦労しています。
SASL を取得する最も簡単な方法は何でしょうか? 標準の sasl.h ファイルを使用できる、コンパイル済み/ビルド済みの Windows SASL .lib ファイルはありますか?
ありがとう、ベン