sin*_*inθ 2 c++ email poco-libraries
我刚刚开始使用 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() << "-";
}
Run Code Online (Sandbox Code Playgroud)
当我进入调试器时,它运行良好,直到到达 sess.login 然后突然代表我在代码中的小条消失了,但程序继续运行(我没有足够的经验知道这意味着什么)。我放入的 cout 内容实际上都没有打印出来,调试器只是越过了该行,但没有任何显示。过了一会儿,出现了这样的情况:
terminate called throwing an exception
Run Code Online (Sandbox Code Playgroud)
发生什么了?
您正在尝试使用基于 TLS 的 SMTP(端口 465 传递到SocketAddress)。您必须一次性学习 (1) POCO 中的 TLS 和证书处理,然后再专注于 (2) 您的目标:发送电子邮件。
我建议从更简单的例子开始学习 POCO。samples您可以在POCO 源代码的各个目录中找到示例代码。
我认为你的代码只是挂在 TLS 握手上,因为它不知道要做什么。
在查看解决方案之前,您应该进行以下修复:
try/catch块中。POCO 使用异常。StreamSocket用。。。来代替SecureStreamSocket。SecureStreamSocket是通过Application类。请参阅应用幻灯片和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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4577 次 |
| 最近记录: |