Revert "Unify the email validation of UserUtil::isValidEmail() and Mailbox::__constru...
authorTim Düsterhus <duesterhus@woltlab.com>
Wed, 27 Apr 2022 12:56:56 +0000 (14:56 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Wed, 27 Apr 2022 12:58:40 +0000 (14:58 +0200)
This change broke WCFSetup, because Mailboxes implicitly carry a language which
is not readily available in WCFSetup.

The validation of the email address should likely be moved into a dedicated
method in Mailbox and then UserUtil::isValidEmail() deprecated.

This reverts commit 395f9a6affffdd5381134d3f9d39b70de453b668.

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

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