77/**
88 * Outlook
99 *
10- * Handles Outlook, Hotmail, and Live email normalization
11- * - TODO: Plus addressing removal commented out until manual confirmation
10+ * Handles Outlook, Hotmail, and Live email normalization based on validator.js rules
11+ * - Removes plus addressing (subaddress)
1212 * - Preserves dots in local part
1313 * - Normalizes to outlook.com domain
1414 */
1515class Outlook extends Provider
1616{
1717 private const SUPPORTED_DOMAINS = [
18- 'outlook.com ' , 'hotmail.com ' , 'live.com ' ,
19- 'outlook.co.uk ' , 'hotmail.co.uk ' , 'live.co.uk ' ,
18+ 'outlook.com ' , 'outlook.at ' , 'outlook.be ' , 'outlook.cl ' , 'outlook.co.il ' , 'outlook.co.nz ' , 'outlook.co.th ' , 'outlook.co.uk ' ,
19+ 'outlook.com.ar ' , 'outlook.com.au ' , 'outlook.com.br ' , 'outlook.com.gr ' , 'outlook.com.pe ' , 'outlook.com.tr ' , 'outlook.com.vn ' ,
20+ 'outlook.cz ' , 'outlook.de ' , 'outlook.dk ' , 'outlook.es ' , 'outlook.fr ' , 'outlook.hu ' , 'outlook.id ' , 'outlook.ie ' ,
21+ 'outlook.in ' , 'outlook.it ' , 'outlook.jp ' , 'outlook.kr ' , 'outlook.lv ' , 'outlook.my ' , 'outlook.ph ' , 'outlook.pt ' ,
22+ 'outlook.sa ' , 'outlook.sg ' , 'outlook.sk ' ,
23+ 'hotmail.com ' , 'hotmail.at ' , 'hotmail.be ' , 'hotmail.ca ' , 'hotmail.cl ' , 'hotmail.co.il ' , 'hotmail.co.nz ' , 'hotmail.co.th ' , 'hotmail.co.uk ' ,
24+ 'hotmail.com.ar ' , 'hotmail.com.au ' , 'hotmail.com.br ' , 'hotmail.com.gr ' , 'hotmail.com.mx ' , 'hotmail.com.pe ' , 'hotmail.com.tr ' , 'hotmail.com.vn ' ,
25+ 'hotmail.cz ' , 'hotmail.de ' , 'hotmail.dk ' , 'hotmail.es ' , 'hotmail.fr ' , 'hotmail.hu ' , 'hotmail.id ' , 'hotmail.ie ' ,
26+ 'hotmail.in ' , 'hotmail.it ' , 'hotmail.jp ' , 'hotmail.kr ' , 'hotmail.lv ' , 'hotmail.my ' , 'hotmail.ph ' , 'hotmail.pt ' ,
27+ 'hotmail.sa ' , 'hotmail.sg ' , 'hotmail.sk ' ,
28+ 'live.com ' , 'live.be ' , 'live.co.uk ' , 'live.com.ar ' , 'live.com.mx ' , 'live.de ' , 'live.es ' , 'live.eu ' , 'live.fr ' , 'live.it ' , 'live.nl ' ,
29+ 'msn.com ' , 'passport.com ' ,
2030 ];
2131
2232 private const CANONICAL_DOMAIN = 'outlook.com ' ;
@@ -31,9 +41,13 @@ public function getCanonical(string $local, string $domain): array
3141 // Convert to lowercase
3242 $ normalizedLocal = $ this ->toLowerCase ($ local );
3343
34- // TODO: Commented out until manual confirmation of Outlook's plus addressing support
35- // Remove plus addressing (everything after +)
36- // $normalizedLocal = $this->removePlusAddressing($normalizedLocal);
44+ // Remove plus addressing (subaddress) - everything after +
45+ $ normalizedLocal = $ this ->removePlusAddressing ($ normalizedLocal );
46+
47+ // Ensure local part is not empty after normalization
48+ if (empty ($ normalizedLocal )) {
49+ throw new \InvalidArgumentException ('Email local part cannot be empty after normalization ' );
50+ }
3751
3852 return [
3953 'local ' => $ normalizedLocal ,
0 commit comments