Merge pull request #4189 from WoltLab/message-id
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 5 May 2021 14:38:43 +0000 (16:38 +0200)
committerGitHub <noreply@github.com>
Wed, 5 May 2021 14:38:43 +0000 (16:38 +0200)
Add Message-ID to MFA emails

wcfsetup/install/files/lib/form/MultifactorManageForm.class.php
wcfsetup/install/files/lib/system/email/SimpleEmail.class.php
wcfsetup/install/files/lib/system/user/multifactor/BackupMultifactorMethod.class.php
wcfsetup/install/files/lib/system/user/multifactor/EmailMultifactorMethod.class.php

index 53ff5b8058571fff1e84e03da9aa9e1a3d0583e7..bad8099ed66f241e8d6f042992bd133decbe5466 100644 (file)
@@ -252,6 +252,12 @@ class MultifactorManageForm extends AbstractFormBuilderForm
     {
         $email = new SimpleEmail();
         $email->setRecipient(WCF::getUser());
+        $email->setMessageID(\sprintf(
+            'com.woltlab.wcf.multifactorSetup/%d/%d/%s',
+            WCF::getUser()->userID,
+            TIME_NOW,
+            \bin2hex(\random_bytes(8))
+        ));
 
         $email->setSubject(
             WCF::getLanguage()->getDynamicVariable('wcf.user.security.multifactor.setupEmail.subject', [
index fea961a68360f621736bb1fe5195203f772d8453..d07aa565c9e59ad28d26c406730f69ee71810523 100644 (file)
@@ -120,6 +120,16 @@ class SimpleEmail
         $this->email->setBody(new MimePartFacade($parts));
     }
 
+    /**
+     * Sets the part left of the at sign (@) in the email's 'Message-Id'.
+     *
+     * @see Email::setMessageID()
+     */
+    public function setMessageID(?string $messageId): void
+    {
+        $this->email->setMessageID($messageId);
+    }
+
     /**
      * Queues this email for delivery.
      *
index 6c8d71443bdbd8c227e1927b91630b61fd62e50a..b6948397108a64aa53f6d2bfbe1809e8e4f45a00 100644 (file)
@@ -363,6 +363,12 @@ final class BackupMultifactorMethod implements IMultifactorMethod
 
         $email = new SimpleEmail();
         $email->setRecipient($setup->getUser());
+        $email->setMessageID(\sprintf(
+            'com.woltlab.wcf.multifactor.backup.used/%d/%d/%s',
+            $setup->getUser()->userID,
+            TIME_NOW,
+            \bin2hex(\random_bytes(8))
+        ));
 
         $email->setSubject(
             WCF::getLanguage()->getDynamicVariable(
index f40b57bf6f6418c77b8f47243fa2605718ec1db0..cde537e50cba992fa83d33cfabe8dc4547789c85 100644 (file)
@@ -110,6 +110,12 @@ final class EmailMultifactorMethod implements IMultifactorMethod
     {
         $email = new SimpleEmail();
         $email->setRecipient($setup->getUser());
+        $email->setMessageID(\sprintf(
+            'com.woltlab.wcf.multifactor.email/%d/%d/%s',
+            $setup->getUser()->userID,
+            TIME_NOW,
+            \bin2hex(\random_bytes(8))
+        ));
 
         $email->setSubject(
             WCF::getLanguage()->getDynamicVariable('wcf.user.security.multifactor.email.subject', [