我最近开始使用 POCO C++ 库来创建一个简单的邮件客户端,我需要使用SecureSMTPClientSession
类,但是编译器报告
Poco/Net/SecureSMTPClientSession.h: No such file or directory
当我搜索已安装的库时,我注意到NETSSL_OPENSSL
缺少了它,尽管它存在于最初从pocoproject.org。
我的安装步骤按照INSTALL
说明进行
./configure
make
make install
那么有没有办法手动安装NETSSL_OPENSSL
库?
如果有人知道该写一个步骤的话请告知。
谢谢。
答案1
我想你做了和我以前一样的事情......我正在检查最新的 Poco 文档并且使用的是旧版本......一开始并不明显,但过了一段时间我意识到了......
根据此网站:[http://axistasoft.com/blog/poco/poco-net/item/sending-email-messages-using-poco-securestreamsocket-securesmtpclientsession-class] 我认为我已成功创建了一个通过 SSL 发送 SMTP 的代码(我无法测试它,因为我意识到 SMTP 服务器不是强制使用 SSL 的,而系统管理员告诉我是的......)
因此代码:
#include <Poco/Crypto/OpenSSLInitializer.h>
#include <Poco/Net/MailMessage.h>
#include <Poco/Net/MailRecipient.h>
#include <Poco/Net/SecureStreamSocket.h>
#include <Poco/Net/SMTPClientSession.h>
#include <Poco/Net/NetException.h>
#include <Poco/Net/Context.h>
#include <Poco/Net/SSLManager.h>
#include <Poco/Net/AcceptCertificateHandler.h>
#include <Poco/AutoPtr.h>
void sendMail() {
using Poco::Net::MailMessage;
using Poco::Net::MailRecipient;
using Poco::Net::InvalidCertificateHandler;
using Poco::Net::AcceptCertificateHandler;
using Poco::Net::Context;
using Poco::Net::SSLManager;
using Poco::Net::SocketAddress;
using Poco::Net::SecureStreamSocket;
using Poco::Net::StreamSocket;
using Poco::Net::SMTPClientSession;
using Poco::Net::SMTPException;
using Poco::Net::NetException;
using Poco::Crypto::OpenSSLInitializer;
using Poco::SharedPtr;
std::string host = "smtp_host.com";
int port = 465;
std::string user = "smtp-user";
std::string password = "smtp-password";
std::string to = "[email protected]";
std::string from = "[email protected]";
std::string subject = "This is the subject";
subject = Poco::Net::MailMessage::encodeWord(subject, "UTF-8");
std::string content = "This is the message body";
MailMessage message;
message.setSender(from);
message.addRecipient(MailRecipient(MailRecipient::PRIMARY_RECIPIENT, to));
message.setSubject(subject);
message.setContentType("text/plain; charset=UTF-8");
message.setContent(content, MailMessage::ENCODING_8BIT);
try {
OpenSSLInitializer::initialize();
SharedPtr<InvalidCertificateHandler> ptrHandler = new AcceptCertificateHandler(false);
Context::Ptr ptrContext = new Context(Context::CLIENT_USE, "", "", "", Context::VERIFY_RELAXED, 9, true, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
SSLManager::instance().initializeClient(0, ptrHandler, ptrContext);
SocketAddress sa(host, port);
SecureStreamSocket socket(sa);
SMTPClientSession session(socket);
try {
session.login(SMTPClientSession::AUTH_LOGIN, user, password);
session.sendMessage(message);
session.close();
OpenSSLInitializer::uninitialize();
} catch (SMTPException &e) {
_errorOccurred(e.displayText());
session.close();
OpenSSLInitializer::uninitialize();
return;
}
} catch (NetException &e) {
_errorOccurred(e.displayText());
return;
}
}
我希望你能使用它:) 让我们向http://axistasoft.com去新加坡:)
祝你好运! ;)
答案2
来自链接https://pocoproject.org/releases/poco-1.7.6/下载poco-1.7.6-all.zip
不是poco-1.7.6.zip
因为poco-1.7.6-all.zip
将具有所有组件,但poco-1.7.6.zip
不包含所有组件。
SecureSMTPClientSession.h
很好地存在于poco-1.7.6-all.zip
。