Eu acho que você fez o mesmo que eu fiz antes ... Eu estava verificando o mais novo doc do Poco e estava usando uma versão mais antiga ... Não foi óbvio para o primeiro mas depois de um tempo eu percebi ...
Baseado neste site: [ link ] Acho que consegui criar um código para enviar SMTP sobre SSL (não pude testá-lo porque percebi que o servidor SMTP NÃO é forçado a SSL enquanto o administrador do sistema me disse que é ...)
Então o código:
#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;
}
}
Espero que você possa usá-lo :) Vamos mandar abraços e beijos para o link para Cingapura:)
Boa sorte! ;)