c – Poco在SMTPClientSession.login之后停止
作者:互联网
我刚开始使用Poco库并尝试创建一个电子邮件程序(我几乎一无所知).以下是我的代码(除了我到目前为止遇到的问题,它可能还有其他问题,但我刚开始研究它)
int main(int argc, char** argv)
{
Poco::Net::SocketAddress add("smtp.gmail.com:465");
Poco::Net::StreamSocket sock(add);
Poco::Net::SMTPClientSession sess(sock);
std::cout << "-";
sess.login(
"gmail.com",
Poco::Net::SMTPClientSession::AUTH_LOGIN,
"----",
"----"
);
Poco::Net::MailMessage msg;
Poco::Net::MailRecipient resp(Poco::Net::MailRecipient::PRIMARY_RECIPIENT,"michaelrgoldfine@gmail.com");
msg.addRecipient(resp);
std::string content("HELP SOS");
msg.encodeWord(content);
std::cout << msg.getContent() << "-";
}
当我进入调试器时,它运行正常,直到它到达sess.login然后突然表示我在代码中的小条消失但程序继续运行(我没有经验足以知道这意味着什么).我投入的cout内容实际上都没有打印,调试器只是超过了那条线,但没有显示出来.过了一会儿就出现了:
terminate called throwing an exception
发生什么了?
解决方法:
您正在尝试使用SMTP over TLS(传递给SocketAddress的端口465).在关注(2)您的目标:发送电子邮件之前,您必须在POCO中学习(1)TLS和证书处理.
我建议用更简单的例子开始学习POCO.您可以在POCO源代码的各个示例目录中找到示例代码.
我认为你的代码只是挂在TLS握手上,因为它不知道该怎么做.
在查看解决方案之前,您应该执行以下修复:
>将代码放在try / catch块中. POCO使用例外.
>将StreamSocket替换为SecureStreamSocket
.
>正确初始化SecureStreamSocket的最简单方法是通过Application类.请参阅Applications幻灯片和Util / samples / SampleApp / src / SampleApp.cpp.
>有关如何正确告知应用程序使用哪些证书,请参阅SSLManager
的文档.
>不要为login()方法指定主机名.主机名是可选的,应该是客户端主机名,而不是服务器(请参阅SMTP RFC).
>记得实际发送消息!你的代码没有发送它:-)
好的,现在是正在运行的代码.我把第4步和第6步作为练习,但是这段代码至少会运行TLS握手,会告诉你它无法验证服务器的证书,如果你在终端上回答是,那么证书上的问题就会失败SMTP验证.
class MiniApp : public Poco::Util::Application {
int main(const vector <string>& args) {
try {
Poco::Net::SocketAddress add("smtp.gmail.com:465");
Poco::Net::SecureStreamSocket sock(add);
Poco::Net::SMTPClientSession session(sock);
session.login(Poco::Net::SMTPClientSession::AUTH_LOGIN, "user", "pw");
Poco::Net::MailMessage msg;
Poco::Net::MailRecipient recipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT,
"michaelrgoldfine@gmail.com");
msg.addRecipient(recipient);
string content("HELP SOS");
msg.encodeWord(content);
} catch (Poco::Exception& e) {
cout << "Error: " << e.displayText() << endl;
return -1;
}
return 0;
}
};
POCO_APP_MAIN(MiniApp)
标签:c,email,poco-libraries 来源: https://codeday.me/bug/20191002/1844598.html