2013-11-11 4 views
1

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

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; 
    } 
    } 

ответ

0

Я не уверен, что вы уже решили это. Лучше поздно, чем никогда? Я только что наткнулся на ваш вопрос. У меня есть рабочая программа, похожая на вашу, у которой нет проблемы с 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(); 
Смежные вопросы