POCO C++ 库的安装不完整

POCO C++ 库的安装不完整

我最近开始使用 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

相关内容