From 13db61022bc624885f6dc5b404f9f5f31a30d098 Mon Sep 17 00:00:00 2001 From: claiff Date: Tue, 18 Oct 2022 15:37:04 +0300 Subject: temp --- src/message/builder/date.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/message/builder/date.cpp b/src/message/builder/date.cpp index 3268935..d92b4db 100644 --- a/src/message/builder/date.cpp +++ b/src/message/builder/date.cpp @@ -10,7 +10,10 @@ namespace smtp::message::builder { result = mBase->Get(); } - result += "Date: Mon, 29 Nov 2010 21:54:29 +1100\r\n"; + auto current_date = time(0); + std::string current_date_as_string = ctime(¤t_date); + + result += "Date: " + current_date_as_string + "\r\n"; return result; } } -- cgit v1.2.3 From 249042f598b3b359ae136ff24b24b1c2bdd60750 Mon Sep 17 00:00:00 2001 From: claiff Date: Wed, 19 Oct 2022 14:18:10 +0300 Subject: fix date bug --- src/message/builder/date.cpp | 4 +- src/message/sender.cpp | 194 ++++++++++++++++++++++--------------------- 2 files changed, 100 insertions(+), 98 deletions(-) diff --git a/src/message/builder/date.cpp b/src/message/builder/date.cpp index d92b4db..9fdc524 100644 --- a/src/message/builder/date.cpp +++ b/src/message/builder/date.cpp @@ -11,9 +11,9 @@ namespace smtp::message::builder result = mBase->Get(); } auto current_date = time(0); - std::string current_date_as_string = ctime(¤t_date); + auto current_date_as_string = ctime(¤t_date); - result += "Date: " + current_date_as_string + "\r\n"; + result += "Date: " + std::string(current_date_as_string) + "\r\n"; return result; } } diff --git a/src/message/sender.cpp b/src/message/sender.cpp index 7df9819..a561392 100644 --- a/src/message/sender.cpp +++ b/src/message/sender.cpp @@ -1,4 +1,5 @@ #include +#include #include "sender.hpp" #include "builder/date.hpp" @@ -11,35 +12,36 @@ namespace smtp::message { - static std::string mText; + static std::string mText; - // - // Constructors/Destructors - // + // + // Constructors/Destructors + // Sender::Sender( manage::Settings const& settings_storage, manage::Mail& mail_to, thread::Queue& message_queue ) - : mSettingsStorage( settings_storage ) - , mMailTo( mail_to ) + : mSettingsStorage( settings_storage ) + , mMailTo( mail_to ) , mMessageQueue( message_queue ) - { + { - } + } - // - //Public methods - // + // + //Public methods + // void Sender::Send() - { - static const std::string METHOD_NAME = "Send message"; + { + static const std::string METHOD_NAME = "Send message"; - CURLcode result = CURLE_OK; - curl_slist* recipients = nullptr; - WriteThis upload_ctx{}; - auto curl = curl_easy_init(); - //TODO сделать инициализацию через регистратор инициализаторов + CURLcode result = CURLE_OK; + curl_slist* recipients = nullptr; + WriteThis upload_ctx{}; + auto curl = curl_easy_init(); + //TODO сделать инициализацию через регистратор инициализаторов while(1) { + mMailTo.WaitWhileEmptyMails(); auto message = mMessageQueue.WaitAndPop(); if( !InitCurl( curl, upload_ctx, mSettingsStorage.GetUserName() )) { @@ -47,7 +49,6 @@ namespace smtp::message } //TODO раздать mail_to другим методам - mMailTo.WaitWhileEmptyMails(); auto mail_to = mMailTo.GetMailToSend(); FillRecipients( curl, recipients ); @@ -65,81 +66,82 @@ namespace smtp::message //TODO сделать деинициализацию через регистратор деинициализаторов curl_slist_free_all( recipients ); curl_easy_cleanup( curl ); - } - - // - //Private methods - // - bool smtp::message::Sender::InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from ) - { - if( !curl ) - { - return false; - } - - if( mSettingsStorage.IsNeedAuth()) - { - curl_easy_setopt( curl, CURLOPT_USERNAME, mSettingsStorage.GetUserName().c_str()); - curl_easy_setopt( curl, CURLOPT_PASSWORD, mSettingsStorage.GetPassword().c_str()); - } - - curl_easy_setopt( curl, CURLOPT_URL, GetHostPortData().c_str()); - - mSettingsStorage.IsNeedSsl() ? curl_easy_setopt( curl, CURLOPT_USE_SSL, ( long ) CURLUSESSL_ALL ) : - curl_easy_setopt( curl, CURLOPT_USE_SSL, ( long ) CURLUSESSL_NONE ); - - curl_easy_setopt( curl, CURLOPT_MAIL_FROM, mail_from.c_str()); - - curl_easy_setopt( curl, CURLOPT_READFUNCTION, ReadCallBack ); - curl_easy_setopt( curl, CURLOPT_READDATA, &upload_ctx ); - curl_easy_setopt( curl, CURLOPT_UPLOAD, 1L ); - curl_easy_setopt( curl, CURLOPT_VERBOSE, 1L ); - return true; - } - - void - Sender::UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& text ) const - { - auto mail_to = mMailTo.GetMailToSend(); - auto text_decorator = std::make_shared < builder::Text >( text ); - text_decorator->Apply( std::make_shared < builder::Subject >( subject )) - .Apply( std::make_shared < builder::Cc >( mail_to )) - .Apply( std::make_shared < builder::From >( mail_from )) - .Apply( std::make_shared < builder::MailTo >( mail_to )) - .Apply( std::make_shared < builder::Date >()); - mText = text_decorator->Get(); - } - - void Sender::FillRecipients( CURL* curl, curl_slist* recipients ) - { - auto mail_to = mMailTo.GetMailToSend(); - for( const auto& recipient: mail_to ) - { - recipients = curl_slist_append( recipients, recipient.c_str()); - } - - curl_easy_setopt( curl, CURLOPT_MAIL_RCPT, recipients ); - } - - std::string Sender::GetHostPortData() const - { - auto result = "smtp://" + mSettingsStorage.GetHost(); - if( !mSettingsStorage.GetPort().empty()) - { - result += ":" + mSettingsStorage.GetPort(); - } - return result; - } - - //TODO Надо убрать этот ужас. Без статики!!! - size_t Sender::ReadCallBack( void* ptr, size_t size, size_t nmemb, void* userp ) - { - auto pooh = reinterpret_cast( userp ); - if( size * nmemb < 1 || pooh->counter++ > 0 ) - { - return 0; - } - memcpy( ptr, mText.c_str(), mText.size()); - return mText.size(); - } + } + + // + //Private methods + // + bool smtp::message::Sender::InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from ) + { + if( !curl ) + { + return false; + } + + if( mSettingsStorage.IsNeedAuth()) + { + curl_easy_setopt( curl, CURLOPT_USERNAME, mSettingsStorage.GetUserName().c_str()); + curl_easy_setopt( curl, CURLOPT_PASSWORD, mSettingsStorage.GetPassword().c_str()); + } + + curl_easy_setopt( curl, CURLOPT_URL, GetHostPortData().c_str()); + + mSettingsStorage.IsNeedSsl() ? curl_easy_setopt( curl, CURLOPT_USE_SSL, ( long ) CURLUSESSL_ALL ) : + curl_easy_setopt( curl, CURLOPT_USE_SSL, ( long ) CURLUSESSL_NONE ); + + curl_easy_setopt( curl, CURLOPT_MAIL_FROM, mail_from.c_str()); + + curl_easy_setopt( curl, CURLOPT_READFUNCTION, ReadCallBack ); + curl_easy_setopt( curl, CURLOPT_READDATA, &upload_ctx ); + curl_easy_setopt( curl, CURLOPT_UPLOAD, 1L ); + curl_easy_setopt( curl, CURLOPT_VERBOSE, 1L ); + return true; + } + + void + Sender::UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& text ) const + { + auto mail_to = mMailTo.GetMailToSend(); + auto text_decorator = std::make_shared < builder::Text >( text ); + text_decorator->Apply( std::make_shared < builder::Date >()) + .Apply( std::make_shared < builder::Subject >( subject )) + .Apply( std::make_shared < builder::Cc >( mail_to )) + .Apply( std::make_shared < builder::From >( mail_from )) + .Apply( std::make_shared < builder::MailTo >( mail_to )); + + mText = text_decorator->Get(); + } + + void Sender::FillRecipients( CURL* curl, curl_slist* recipients ) + { + auto mail_to = mMailTo.GetMailToSend(); + for( const auto& recipient: mail_to ) + { + recipients = curl_slist_append( recipients, recipient.c_str()); + } + + curl_easy_setopt( curl, CURLOPT_MAIL_RCPT, recipients ); + } + + std::string Sender::GetHostPortData() const + { + auto result = "smtp://" + mSettingsStorage.GetHost(); + if( !mSettingsStorage.GetPort().empty()) + { + result += ":" + mSettingsStorage.GetPort(); + } + return result; + } + + //TODO Надо убрать этот ужас. Без статики!!! + size_t Sender::ReadCallBack( void* ptr, size_t size, size_t nmemb, void* userp ) + { + auto pooh = reinterpret_cast( userp ); + if( size * nmemb < 1 || pooh->counter++ > 0 ) + { + return 0; + } + memcpy( ptr, mText.c_str(), mText.size()); + return mText.size(); + } } -- cgit v1.2.3