From 7d0c13f6e141e8833e4c7ba7e5b1f6bfc5a5a651 Mon Sep 17 00:00:00 2001 From: Jean-Laurent <jean-laurent.duzant@xelians.fr> Date: Wed, 21 Dec 2022 20:33:10 +0100 Subject: [PATCH] FEAT #23044 TIME 0:20 Replace sender email by SMTP sender email when useSMTPAuth is active && remove SMTP sender rejected errors --- src/app/email/controllers/EmailController.php | 67 +++++++++++-------- src/core/lang/lang-en.php | 1 + src/core/lang/lang-fr.php | 1 + 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/app/email/controllers/EmailController.php b/src/app/email/controllers/EmailController.php index 426ff50a259..13e397dc2ad 100644 --- a/src/app/email/controllers/EmailController.php +++ b/src/app/email/controllers/EmailController.php @@ -46,11 +46,6 @@ use User\models\UserModel; class EmailController { - private const SMTP_ERRORS_SENDER_REJECTED = [ - 'Client does not have permissions to send as this sender', - 'Sender address rejected' - ]; - public function send(Request $request, Response $response) { if (!PrivilegeController::hasPrivilege(['privilegeId' => 'sendmail', 'userId' => $GLOBALS['id']])) { @@ -80,6 +75,17 @@ class EmailController return ['errors' => $check['errors'], 'code' => $check['code']]; } + $configuration = ConfigurationModel::getByPrivilege(['privilege' => 'admin_email_server', 'select' => ['value']]); + $configuration = json_decode($configuration['value'], true); + if (empty($configuration)) { + return ['errors' => 'Configuration is missing']; + } + + if (!empty($configuration['useSMTPAuth'])) { + $args['data']['sender']['email'] = $configuration['from']; + } + + $id = EmailModel::create([ 'userId' => $args['userId'], 'sender' => empty($args['data']['sender']) ? '{}' : json_encode($args['data']['sender']), @@ -121,12 +127,18 @@ class EmailController exec("php src/app/email/scripts/sendEmail.php {$customId} {$id} {$args['userId']} '{$encryptKey}' '{$options}' > /dev/null &"); } if (!empty($isSent)) { + $info = _EMAIL_ADDED ; + + if (!empty($configuration['useSMTPAuth'])) { + $info .= ' : ' . _SENDER_EMAIL_REPLACED_SMTP_SENDER; + } + HistoryController::add([ 'tableName' => 'emails', 'recordId' => $id, 'eventType' => 'ADD', 'eventId' => 'emailCreation', - 'info' => _EMAIL_ADDED + 'info' => $info ]); if (!empty($args['data']['document']['id'])) { @@ -135,7 +147,7 @@ class EmailController 'recordId' => $args['data']['document']['id'], 'eventType' => 'ADD', 'eventId' => 'emailCreation', - 'info' => _EMAIL_ADDED + 'info' => $info ]); } } @@ -289,6 +301,17 @@ class EmailController return $response->withStatus($check['code'])->withJson(['errors' => $check['errors']]); } + $configuration = ConfigurationModel::getByPrivilege(['privilege' => 'admin_email_server', 'select' => ['value']]); + $configuration = json_decode($configuration['value'], true); + if (empty($configuration)) { + return ['errors' => 'Configuration is missing']; + } + + if (!empty($configuration['useSMTPAuth'])) { + $body['sender']['email'] = $configuration['from']; + } + + EmailModel::update([ 'set' => [ 'sender' => empty($body['sender']) ? '{}' : json_encode($body['sender']), @@ -331,12 +354,18 @@ class EmailController ]); } } else { + $info = _EMAIL_UPDATED ; + + if (!empty($configuration['useSMTPAuth'])) { + $info .= ' : ' . _SENDER_EMAIL_REPLACED_SMTP_SENDER; + } + HistoryController::add([ 'tableName' => 'emails', 'recordId' => $args['id'], 'eventType' => 'UP', 'eventId' => 'emailModification', - 'info' => _EMAIL_UPDATED + 'info' => $info ]); if (!empty($args['data']['document']['id'])) { @@ -345,7 +374,7 @@ class EmailController 'recordId' => $args['data']['document']['id'], 'eventType' => 'UP', 'eventId' => 'emailModification', - 'info' => _EMAIL_UPDATED + 'info' => $info ]); } } @@ -759,26 +788,6 @@ class EmailController $errors = !empty($history[0]['info']) ? $history[0]['info'] : $phpmailer->ErrorInfo; - // If we cannot override from with the sender email address, we try sending the email with the from in the configuration - if ($email['sender']['email'] != $configuration['from']) { - $tryWithConfigFrom = false; - foreach (EmailController::SMTP_ERRORS_SENDER_REJECTED as $errorCandidate) { - if (stripos($errors, $errorCandidate) !== false) { - $tryWithConfigFrom = true; - break; - } - } - if ($tryWithConfigFrom) { - $sender = [ - 'email' => $configuration['from'], - 'entityId' => $email['sender']['entityId'] ?? null - ]; - EmailModel::update(['set' => ['sender' => json_encode($sender)], 'where' => ['id = ?'], 'data' => [$args['emailId']]]); - - return EmailController::sendEmail(['emailId' => $args['emailId'], 'userId' => $args['userId']]); - } - } - return ['errors' => $errors]; } diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php index 48980dab8f1..43ec67b24ba 100755 --- a/src/core/lang/lang-en.php +++ b/src/core/lang/lang-en.php @@ -58,6 +58,7 @@ define('_DOCUMENT_OUT_PERIMETER', 'Document out of perimeter'); define('_EMAIL_ADDED', 'Email added'); define('_EMAIL_REMOVED', 'Email removed'); define('_EMAIL_UPDATED', 'Email updated'); +define('_SENDER_EMAIL_REPLACED_SMTP_SENDER', "The sender's email is replaced by the SMTP sender"); define('_ENTITY_CREATION', 'Entity created'); define('_ENTITY_MODIFICATION', 'Entity modification'); define('_ENTITY_SUPPRESSION', 'Entity deleted'); diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php index d51abc74ea6..3e0e54114db 100755 --- a/src/core/lang/lang-fr.php +++ b/src/core/lang/lang-fr.php @@ -58,6 +58,7 @@ define('_DOCUMENT_OUT_PERIMETER', 'Courrier en dehors du périmètre'); define('_EMAIL_ADDED', 'Courriel ajouté'); define('_EMAIL_REMOVED', 'Courriel supprimé'); define('_EMAIL_UPDATED', 'Courriel mis à jour'); +define('_SENDER_EMAIL_REPLACED_SMTP_SENDER', "L'email de l'expéditeur est remplacé par l'expéditeur SMTP"); define('_ENTITY_CREATION', 'Création entité'); define('_ENTITY_MODIFICATION', 'Modification entité'); define('_ENTITY_SUPPRESSION', 'Suppression entité'); -- GitLab