我正在嘗試使用libetpan庫和下面的代碼通過Google服務器發送電子郵件。但是,當我運行mailsmtp_auth時,它返回16(MAILSMTP_ERROR_AUTH_NOT_SUPPORTED)。任何想法爲什麼?我已經使用相同的庫運行IMAP,但由於某些原因,SMTP正在逃避我。我在網上發現了很多示例,但它們都不適用於Gmail。libetpan和Gmail SMTP(現在與SASL)
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] = "[email protected]";
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)中進行編譯時,沒有關於在libetpan中包含SASL支持的文檔,並且在線定位任何特定於Windows的信息時遇到許多問題。
SASL最簡單的方法是什麼?是否有預編譯/預編譯的Windows SASL .lib文件,我可以使用標準sasl.h文件?
感謝, 本
感謝您的答覆。我試過了,但是現在在mailesmtp_ehlo命令上得到MAILSMTP_ERROR_STREAM(3)。 – Fmstrat
我還嘗試了一些代碼我在網上找到,即具有「\t低= mailstream_get_low(SMTP的>流); \t FD = mailstream_low_get_fd(低); \t new_low = mailstream_low_tls_open(FD); \t mailstream_low_free(低); \t mailstream_set_low(smtp-> stream,new_low);「之前的「ehlo」,但只是導致mailesmtp_ehlo命令崩潰的應用程序。這個樣本也有ehlo,而不是helo。 – Fmstrat
其實,我剛剛意識到你在連接中將「套接字」更改爲「ssl」。使用「ssl」,libetpan庫實際上崩潰了.. – Fmstrat