Неполная установка библиотек POCO C++
Недавно я начал использовать библиотеки POCO C++ для создания простого почтового клиента, и мне нужно было использовать SecureSMTPClientSession
класс, но отчеты компилятора
Poco/Net/SecureSMTPClientSession.h: No such file or directory
Когда я искал через установленные библиотеки, я заметил, что NETSSL_OPENSSL
отсутствует, хотя он существует в первоначально загруженном файле с http://pocoproject.org/.
Мои шаги установки следовали INSTALL
инструкции
./configure
make
make install
Так есть ли способ установить вручную NETSSL_OPENSSL
библиотека?
Пожалуйста, если кто-нибудь знал, чтобы написать шаги.
Спасибо.
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
,
Я думаю, что вы сделали то же самое, что и я раньше... Я проверял новейший документ Poco и использовал более старую версию... Это было неочевидно для первой, но через некоторое время я понял...
Основываясь на этом сайте: [ http://axistasoft.com/blog/poco/poco-net/item/sending-email-messages-using-poco-securestreamsocket-securesmtpclientsession-class ] Я думаю, что мне удалось создать код для отправки SMTP через SSL (я не смог проверить это, потому что понял, что 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-recipient@example.com";
std::string from = "email-sender@example.com";
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/ в Сингапур:)
Удачи!;)