Недавно я начал использовать библиотеки POCO C ++ для создания простого почтового клиента, и мне нужно было использовать класс SecureSMTPClientSession
, но отчеты компилятора
Poco/Net/SecureSMTPClientSession.h: No such file or directory
Когда я искал через установленные библиотеки, я заметил, что NETSSL_OPENSSL
отсутствует, хотя существует в первоначально загруженном файле с pocoproject.org .
Мои шаги установки следовали INSTALL
инструкциям
./configure
make
make install
Так есть ли способ установить библиотеку NETSSL_OPENSSL
вручную?
Пожалуйста, если кто-нибудь знал, что написать шаги.
Спасибо.
Я думаю, что Вы сделали то же как, я сделал прежде... Я проверял новейшее Постепенно документ и использовал более старую версию... Это не было очевидно для первого, но через некоторое время я понял...
На основе этого сайта: [ 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 в Сингапур :)
Удачи! ;)
Из ссылки 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
.