100% загрузка ЦП после отправки почты через poco и ssl

Я пытаюсь отправить почту через lib poco и ssl. Я использую очень простой пример кода, потому что мне достаточно функциональности. Код работает, так что он действительно хочет, чтобы я хотел, чтобы он сделал, но, к сожалению, загрузка процессора поднялась до 100% после отправки почты. Это происходило каждый раз, поэтому я думаю, что допустил ошибку в коде. Может ли кто-нибудь дать мне подсказку, чтобы помочь мне? Большое спасибо.

void <myclass>::sendMessageSSL() {
    string to = "<toMail>";
    string from = "<from>";
    string subject = "Subject";
    subject = MailMessage::encodeWord(subject, "UTF-8");
    string content = "Content";
    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 {
         SecureSMTPClientSession session(host_out, port_out);
         session.open();
         // Initialize the NetSSL library, as well as the underlying OpenSSL libraries
         initializeSSL();
         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);
         try {
             // TLS begins with an unsecured connection
             session.login();
             // Upgrades to secured connection once the information is sent
             if (session.startTLS(ptrContext)) {
            session.login(SMTPClientSession::AUTH_LOGIN, user, pass);
            session.sendMessage(message);
             }
             session.close();
             uninitializeSSL();
          } catch (SMTPException &e) {
             cerr << e.displayText() << endl;
             session.close();
             uninitializeSSL();
          }
     } catch (NetException &e) {
         cerr << e.displayText() << endl;
     }
  }

person user2979419    schedule 11.11.2013    source источник


Ответы (1)


Я не уверен, что вы уже решили это. Лучше поздно, чем никогда? Я только что наткнулся на ваш вопрос. У меня есть рабочая программа, похожая на вашу, которая не имеет 100% проблемы с процессором. Я поделюсь различиями моего кода и того, что вы опубликовали.

Во-первых, я передаю PrivateKeyPassphraseHandler вместо нулевого указателя для initializeClient. Смотри ниже:

    SharedPtr<PrivateKeyPassphraseHandler> ptrPrivKeyPassHandler = new KeyConsoleHandler(false);
    SharedPtr<InvalidCertificateHandler> ptrInvalidCertHandler = 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(ptrPrivKeyPassHandler, ptrInvalidCertHandler, ptrContext);

Во-вторых, я абсолютно уверен, что закрою сеанс и деинициализирую механизм SSL. Я делаю это, размещая эти две команды снаружи и ниже области try/catch, чтобы они всегда выполнялись. Если вы получаете NetException, похоже, что ваш код не будет выполнять эти два оператора.

    session.close();
    uninitializeSSL();
person EmpathicSage    schedule 15.06.2016