Add Mailbox::filterAddress()
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 27 Apr 2022 13:07:02 +0000 (15:07 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 27 Apr 2022 13:10:24 +0000 (15:10 +0200)
see 1723b426d25ecaad5034a6f74e3b29db25dc1b29

wcfsetup/install/files/lib/system/email/Mailbox.class.php

index 64d8eb58c084bf96a53dcce3f4872f725e78e138..e75db89079efad28645572e987f084faf4078a08 100644 (file)
@@ -45,6 +45,26 @@ class Mailbox
      * @throws  \DomainException
      */
     public function __construct($address, $name = null, ?Language $language = null)
+    {
+        $this->address = self::filterAddress($address);
+        $this->name = $name;
+        if ($language === null) {
+            $this->languageID = LanguageFactory::getInstance()->getDefaultLanguageID();
+        } else {
+            $this->languageID = $language->languageID;
+        }
+    }
+
+    /**
+     * Preprocesses the given email address to improve compatibility for
+     * IDN domains. The rewritten email address will be returned and an
+     * exception will be thrown if the email address is invalid and cannot
+     * be fixed.
+     *
+     * @since 5.5
+     * @throws \DomainException If the given address is not valid.
+     */
+    public static function filterAddress(string $address): string
     {
         // There could be multiple at-signs, but only in the localpart:
         //   Search for the last one.
@@ -78,13 +98,7 @@ class Mailbox
             throw new \DomainException("The given email address '" . $address . "' is invalid.");
         }
 
-        $this->address = $address;
-        $this->name = $name;
-        if ($language === null) {
-            $this->languageID = LanguageFactory::getInstance()->getDefaultLanguageID();
-        } else {
-            $this->languageID = $language->languageID;
-        }
+        return $address;
     }
 
     /**