Delegate to Mailbox::filterAddress() in UserUtil::isValidEmail()
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 27 Apr 2022 13:08:19 +0000 (15:08 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 27 Apr 2022 13:10:28 +0000 (15:10 +0200)
see 1723b426d25ecaad5034a6f74e3b29db25dc1b29

wcfsetup/install/files/lib/util/UserUtil.class.php

index a26d2ca9bc7433b636e8141b7af2f62b5dae440d..74b6704743bc9b9138fc8600b8985c767addcd25 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace wcf\util;
 
+use wcf\system\email\Mailbox;
 use wcf\system\WCF;
 
 /**
@@ -62,30 +63,23 @@ final class UserUtil
 
     /**
      * Returns true if the given e-mail is a valid address.
-     * @see http://www.faqs.org/rfcs/rfc821.html
      *
+     * @see Mailbox::filterAddress()
      * @param string $email
-     * @return  bool
      */
-    public static function isValidEmail($email)
+    public static function isValidEmail($email): bool
     {
         if (\mb_strlen($email) > 191) {
             return false;
         }
 
-        // local-part
-        $c = '!#\$%&\'\*\+\-\/0-9=\?a-z\^_`\{\}\|~';
-        $string = '[' . $c . ']*(?:\\\\[\x00-\x7F][' . $c . ']*)*';
-        $localPart = $string . '(?:\.' . $string . ')*';
-
-        // domain
-        $name = '[a-z0-9](?:[a-z0-9-]*[a-z0-9])?';
-        $domain = $name . '(?:\.' . $name . ')*\.[a-z]{2,}';
-
-        // mailbox
-        $mailbox = $localPart . '@' . $domain;
+        try {
+            Mailbox::filterAddress($email);
 
-        return \preg_match('/^' . $mailbox . '$/i', $email);
+            return true;
+        } catch (\DomainException $e) {
+            return false;
+        }
     }
 
     /**