diff --git a/src/cpp/Gradido_LoginServer.cpp b/src/cpp/Gradido_LoginServer.cpp index 399aa6f3e..38880dce6 100644 --- a/src/cpp/Gradido_LoginServer.cpp +++ b/src/cpp/Gradido_LoginServer.cpp @@ -130,6 +130,8 @@ int Gradido_LoginServer::main(const std::vector& args) createConsoleFileAsyncLogger("errorLog", log_Path + "errorLog.txt"); Poco::Logger& errorLog = Poco::Logger::get("errorLog"); + createConsoleFileAsyncLogger("emailLog", log_Path + "emailLog.txt"); + // *************** load from config ******************************************** std::string cfg_Path = Poco::Path::config() + "grd_login/"; diff --git a/src/cpp/SingletonManager/EmailManager.cpp b/src/cpp/SingletonManager/EmailManager.cpp index ee62135e0..5760c8ee2 100644 --- a/src/cpp/SingletonManager/EmailManager.cpp +++ b/src/cpp/SingletonManager/EmailManager.cpp @@ -11,7 +11,7 @@ EmailManager::EmailManager() - : Thread("emails", false), mInitalized(false), mDisableEmail(false) + : Thread("emails", false), mEmailLog(Poco::Logger::get("emailLog")), mInitalized(false), mDisableEmail(false) { @@ -55,6 +55,26 @@ bool EmailManager::init(const Poco::Util::LayeredConfiguration& cfg) return true; } +void EmailManager::addEmail(model::Email* email) { + if (mDisableEmail) { + std::string log_message = "Email should be sended to: "; + auto email_user = email->getUser(); + if (email_user && email_user->getModel()) { + log_message += email_user->getModel()->getNameWithEmailHtml(); + } + else { + log_message += ""; + } + log_message += ", type: "; + log_message += model::Email::emailTypeString(email->getType()); + mEmailLog.log(log_message); + delete email; + return; + } + mPendingEmails.push(email); + condSignal(); +} + void EmailManager::exit() { model::Email* email = nullptr; @@ -113,8 +133,19 @@ int EmailManager::ThreadFunction() mailClientSession.sendMessage(mailMessage); // add for debugging if (email->getUser()) { + //printf("send email to %s\n", user_model->getEmail().data()); auto user_model = email->getUser()->getModel(); - printf("send email to %s\n", user_model->getEmail().data()); + std::string log_message = "Email sended to: "; + auto email_user = email->getUser(); + if (user_model) { + log_message += email_user->getModel()->getNameWithEmailHtml(); + } + else { + log_message += ""; + } + log_message += ", type: "; + log_message += model::Email::emailTypeString(email->getType()); + mEmailLog.log(log_message); } } else { diff --git a/src/cpp/SingletonManager/EmailManager.h b/src/cpp/SingletonManager/EmailManager.h index d71bd22e4..0e8824cd0 100644 --- a/src/cpp/SingletonManager/EmailManager.h +++ b/src/cpp/SingletonManager/EmailManager.h @@ -30,10 +30,7 @@ public: inline const std::string& getAdminReceiver() { return mEmailAccount.admin_receiver; } //! \brief call delete on email after sending it - inline void addEmail(model::Email* email) { - if (mDisableEmail) { delete email; return; } - mPendingEmails.push(email); condSignal(); - } + void addEmail(model::Email* email); protected: EmailManager(); @@ -49,6 +46,7 @@ protected: std::string url; int port; }; + Poco::Logger& mEmailLog; EmailAccount mEmailAccount; bool mInitalized; diff --git a/src/cpp/model/email/Email.cpp b/src/cpp/model/email/Email.cpp index 95586842d..2efa473e4 100644 --- a/src/cpp/model/email/Email.cpp +++ b/src/cpp/model/email/Email.cpp @@ -348,4 +348,40 @@ Gradido Login-Server\n\ } return (EmailType)type; } + + /* + EMAIL_DEFAULT, + EMAIL_ERROR, + EMAIL_USER_VERIFICATION_CODE, + EMAIL_USER_VERIFICATION_CODE_RESEND, + EMAIL_USER_VERIFICATION_CODE_RESEND_AFTER_LONG_TIME, + EMAIL_ADMIN_USER_VERIFICATION_CODE, + EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND, + EMAIL_USER_RESET_PASSWORD, + EMAIL_ADMIN_RESET_PASSWORD_REQUEST_WITHOUT_MEMORIZED_PASSPHRASE, + EMAIL_NOTIFICATION_TRANSACTION_CREATION, + EMAIL_NOTIFICATION_TRANSACTION_TRANSFER, + EMAIL_USER_REGISTER_OLD_ELOPAGE, + EMAIL_MAX + */ + const char* Email::emailTypeString(EmailType type) + { + switch (type) { + case EMAIL_DEFAULT: return "default"; + case EMAIL_ERROR: return "error"; + case EMAIL_USER_VERIFICATION_CODE: return "email user verification code"; + case EMAIL_USER_VERIFICATION_CODE_RESEND: return "email user verification code resend"; + case EMAIL_USER_VERIFICATION_CODE_RESEND_AFTER_LONG_TIME: return "email user verification code resend after long time"; + case EMAIL_ADMIN_USER_VERIFICATION_CODE: return "email admin user verification code"; + case EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND: return "email admin user verification code resend"; + case EMAIL_USER_RESET_PASSWORD: return "user reset Password"; + case EMAIL_ADMIN_RESET_PASSWORD_REQUEST_WITHOUT_MEMORIZED_PASSPHRASE: return "user reset password without memorized passphrase"; + case EMAIL_NOTIFICATION_TRANSACTION_CREATION: return "email notification transaction creation"; + case EMAIL_NOTIFICATION_TRANSACTION_TRANSFER: return "email notification transaction transfer"; + case EMAIL_USER_REGISTER_OLD_ELOPAGE: return "user register automatic throw elopage"; + case EMAIL_MAX: return ""; + + } + return ""; + } } \ No newline at end of file diff --git a/src/cpp/model/email/Email.h b/src/cpp/model/email/Email.h index e5380b2a1..d2887a26c 100644 --- a/src/cpp/model/email/Email.h +++ b/src/cpp/model/email/Email.h @@ -50,11 +50,13 @@ namespace model { static EmailType convertTypeFromInt(int type); inline EmailType getType() { return mType; } + static const char* emailTypeString(EmailType type); inline controller::User* getUser() { if (!mUser.isNull()) return mUser.get(); return nullptr; } virtual bool draft(Net::MailMessage* mailMessage, LanguageCatalog* langCatalog); inline void addContent(Poco::Net::StringPartSource* str_content) { mAdditionalStringPartSrcs.push(str_content); } + protected: std::string replaceUserNamesAndLink(const char* src, const std::string& first_name, const std::string& last_name, const std::string& link); std::string replaceEmail(const char* src, const std::string& email);