Unify the email validation of UserUtil::isValidEmail() and Mailbox::__construct()
authorTim Düsterhus <duesterhus@woltlab.com>
Tue, 26 Apr 2022 07:08:09 +0000 (09:08 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Tue, 26 Apr 2022 07:11:24 +0000 (09:11 +0200)
wcfsetup/install/files/lib/util/UserUtil.class.php

index a26d2ca9bc7433b636e8141b7af2f62b5dae440d..e34edbd2746c2ab035cc4ad348bdb1eb2d7e3d6f 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace wcf\util;
 
+use wcf\system\email\Mailbox;
 use wcf\system\WCF;
 
 /**
@@ -61,31 +62,23 @@ final class UserUtil
     }
 
     /**
-     * Returns true if the given e-mail is a valid address.
-     * @see http://www.faqs.org/rfcs/rfc821.html
+     * Returns whether the given email is accepted by the Mailbox class.
      *
-     * @param string $email
-     * @return  bool
+     * @see wcf\system\email\Mailbox::__construct()
      */
-    public static function isValidEmail($email)
+    public static function isValidEmail(string $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 {
+            new Mailbox($email);
 
-        return \preg_match('/^' . $mailbox . '$/i', $email);
+            return true;
+        } catch (\DomainException $e) {
+            return false;
+        }
     }
 
     /**