我正在尝试使用带有此代码的Poco Net库发送电子邮件(我的凭据显然是随意的):
void send_email() {
// Poco::Net::SMTPClientSession session("localhost", 465);
const std::string& smtp_host {"mail.example.com"};
const std::string& smtp_user {"marinos@example.com"};
const std::string& smtp_passwd {"myPassword"};
std::string to = "marinos@example.com";
std::string from = "marinos@example.com";
std::string subject = "Your first e-mail message sent using Poco Libraries";
subject = Poco::Net::MailMessage::encodeWord(subject, "UTF-8");
std::string content = "Well done! You've successfully sent your first message using Poco SMTPClientSession";
Poco::Net::MailMessage message;
message.setSender(from);
message.addRecipient(Poco::Net::MailRecipient{Poco::Net::MailRecipient::PRIMARY_RECIPIENT, to});
message.setSubject(subject);
message.setContentType("text/plain; charset=UTF-8");
message.setContent(content, Poco::Net::MailMessage::ENCODING_8BIT);
try {
Poco::Net::SMTPClientSession session(smtp_host, 465);
session.open(); // this is where it halts
try {
session.login(Poco::Net::SMTPClientSession::AUTH_LOGIN, smtp_user, smtp_passwd);
session.sendMessage(message);
std::cout << "Message successfully sent" << std::endl;
session.close();
} catch (Poco::Net::SMTPException& e) {
std::cerr << e.displayText() << std::endl;
session.close();
}
} catch (Poco::Net::NetException& e) {
std::cerr << e.displayText() << std::endl;
}
}
我的程序暂停了。我使用调试器来查找问题,并且在调用session.open()
时程序似乎停止了。我在这里做错了吗?
答案 0 :(得分:1)
由于我不知道您的SMTP服务器的规格,我推测您可能会假设使用SMTPS而不是普通SMTP,因为端口465是SMTPS的默认端口(根据Wikipedia)。我猜这个程序在SSL握手期间停止了。通过查看Poco documentation,我发现存在Poco::Net::SMTPClientSession
的SSL版本。因此,您应该尝试使用SecureSMTPClientSession
。检查您的邮件服务器是否需要START_TLS,在这种情况下,我猜您应该另外调用bool startTLS()
。