From 56508cce17761c701d09b2330fd43267f8d48d4e Mon Sep 17 00:00:00 2001 From: Jakub Onderka Date: Sat, 6 Feb 2021 13:54:07 +0100 Subject: [PATCH] new: [mail] Add reference for event alert emails --- app/Lib/Tools/SendEmail.php | 16 +++++++++++++--- app/Lib/Tools/SendEmailTemplate.php | 18 ++++++++++++++++++ app/Model/Event.php | 1 + 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/Lib/Tools/SendEmail.php b/app/Lib/Tools/SendEmail.php index f8dd8f7ba..3379dffa7 100644 --- a/app/Lib/Tools/SendEmail.php +++ b/app/Lib/Tools/SendEmail.php @@ -441,15 +441,25 @@ class SendEmail if ($body instanceof SendEmailTemplate) { $body->set('canEncryptSmime', $canEncryptSmime); $body->set('canEncryptGpg', $canEncryptGpg); - $body = $body->render($hideDetails); + $bodyContent = $body->render($hideDetails); } else { if ($hideDetails && $bodyWithoutEncryption) { $body = $bodyWithoutEncryption; } - $body = new CakeEmailBody($body); + $bodyContent = new CakeEmailBody($body); } - $email = $this->create($user, $subject, $body, [], $replyToUser); + $email = $this->create($user, $subject, $bodyContent, [], $replyToUser); + + // Generate `In-Reply-To` and `References` to group emails + if ($body instanceof SendEmailTemplate && $body->referenceId()) { + $reference = sha1($body->referenceId() . '|' . Configure::read('MISP.uuid')); + $reference = "<$reference@{$email->domain()}>"; + $email->addHeaders([ + 'In-Reply-To' => $reference, + 'References' => $reference, + ]); + } $signed = false; if (Configure::read('GnuPG.sign')) { diff --git a/app/Lib/Tools/SendEmailTemplate.php b/app/Lib/Tools/SendEmailTemplate.php index 7ab7009a6..a378fbd22 100644 --- a/app/Lib/Tools/SendEmailTemplate.php +++ b/app/Lib/Tools/SendEmailTemplate.php @@ -7,12 +7,29 @@ class SendEmailTemplate /** @var string */ private $viewName; + /** @var string|null */ + private $referenceId; + public function __construct($viewName) { $this->viewName = $viewName; } /** + * This value will be used for grouping emails in mail client. + * @param string|null $referenceId + * @return string + */ + public function referenceId($referenceId = null) + { + if ($referenceId === null) { + return $this->referenceId ; + } + $this->referenceId = $referenceId; + } + + /** + * Set template variable. * @param string $key * @param mixed $value */ @@ -29,6 +46,7 @@ class SendEmailTemplate public function render($hideDetails = false) { $View = new View(); + $View->autoLayout = false; $View->helpers = ['TextColour']; $View->loadHelpers(); diff --git a/app/Model/Event.php b/app/Model/Event.php index 67eb2b452..576159a4d 100755 --- a/app/Model/Event.php +++ b/app/Model/Event.php @@ -3247,6 +3247,7 @@ class Event extends AppModel $template->set('distributionLevels', $this->distributionLevels); $template->set('analysisLevels', $this->analysisLevels); $template->set('tlp', $this->getEmailSubjectMarkForEvent($event)); + $template->referenceId("event-alert|{$event['Event']['id']}"); return $template; }