你好,晚上好,
这个主题对我和许多人来说都是一个麻烦,假设我想在C ++程序中发送EMail以使用smtp和StartTLS,我该怎么做,我从谷歌中剔除了一个简单的源代码,我看到了这个来自这里的代码
http://www.drdobbs.com/sending-e-mail-using-smtp-and-winsock/184416591
现在我想使用谷歌邮件,它使用身份验证smtp和startTLS如何做到这一点
我看到的源代码看起来像这样
#pragma comment(lib, "wsock32.lib")
#include <windows.h>
#include "MailMessage.h"
int main(int argc, char **argv)
{
MailMessage mail("A Sender",
"someone@someplace.com",
"mail.someplace.com");
mail.To("A Recipient",
"you@yourplace.com");
mail.Subject("Sample message");
mail.Body("Plain text body",
"<HTML><BODY>\r\n"
" <H2>HTML Body</H2>\r\n"
"</BODY></HTML>""\r\n");
mail.Attach("C:\\Attach.txt");
const char *result =
mail.Send().data();
if (result[0] == '\0')
result = "Success";
MessageBox(NULL, result, "Result",
MB_ICONINFORMATION|MB_OK);
return 0;
}
答案 0 :(得分:0)
连接到服务器并发出EHLO
(非HELO
)命令后,如果服务器的回复包含STARTTLS
功能,那么您可以发出{{1命令随时与服务器建立安全会话。收到成功的STARTTLS
回复后,您需要发送并完成SSL / TLS握手。创建会话后,您可以继续发送SMTP命令并接收SMTP回复,从新的STARTTLS
命令开始(因为在连接受到保护后服务器的功能可能会发生变化)。您必须加密命令并随时解密回复。通信将如下所示(此示例假定如果启用了两步验证,则在GMail中配置了特定于应用程序的密码):
S: 220 smtp.gmail.com ESMTP dg12sm55710335pac.47 - gsmtp C: EHLO <hostname> S: 250-smtp.gmail.com at your service, [<ip address>] S: 250-SIZE 35882577 S: 250-8BITMIME S: 250-STARTTLS S: 250-ENHANCEDSTATUSCODES S: 250-PIPELINING S: 250-CHUNKING S: 250 SMTPUTF8 C: STARTTLS S: 220 2.0.0 Ready to start TLS C/S: (Exchange SSL/TLS handshake) C/S: (Everything from here on is now encrypted) C: EHLO <hostname> S: 250-smtp.gmail.com at your service, [<ip address>] S: 250-SIZE 35882577 S: 250-8BITMIME S: 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH S: 250-ENHANCEDSTATUSCODES S: 250-PIPELINING S: 250-CHUNKING S: 250 SMTPUTF8 C: AUTH LOGIN S: 334 VXNlcm5hbWU6 C: (Send base64 encoded username) S: 334 UGFzc3dvcmQ6 C: (Send base64 encoded password) S: 235 2.7.0 Accepted C: (Send email as needed) C: QUIT S: 221 2.0.0 closing connection m1sm91929700pfi.27 - gsmtp
现在,您实际处理加密的方式取决于您。您可以使用OpenSSL之类的库,也可以使用Microsoft的Crypto / SChannel API。有很多关于如何使用套接字的在线教程和书籍。