@@ -56,6 +56,126 @@ export default class Email implements EmailProps {
5656 'ya.ru' : 'yandex.ru' ,
5757 } ;
5858
59+ private static readonly fastmailDomains : { [ key : string ] : boolean } = {
60+ '123mail.org' : true ,
61+ '150mail.com' : true ,
62+ '150ml.com' : true ,
63+ '16mail.com' : true ,
64+ '2-mail.com' : true ,
65+ '4email.net' : true ,
66+ '50mail.com' : true ,
67+ 'airpost.net' : true ,
68+ 'allmail.net' : true ,
69+ 'bestmail.us' : true ,
70+ 'cluemail.com' : true ,
71+ 'elitemail.org' : true ,
72+ 'emailcorner.net' : true ,
73+ 'emailengine.net' : true ,
74+ 'emailengine.org' : true ,
75+ 'emailgroups.net' : true ,
76+ 'emailplus.org' : true ,
77+ 'emailuser.net' : true ,
78+ 'eml.cc' : true ,
79+ 'f-m.fm' : true ,
80+ 'fast-email.com' : true ,
81+ 'fast-mail.org' : true ,
82+ 'fastem.com' : true ,
83+ 'fastemail.us' : true ,
84+ 'fastemailer.com' : true ,
85+ 'fastest.cc' : true ,
86+ 'fastimap.com' : true ,
87+ 'fastmail.cn' : true ,
88+ 'fastmail.co.uk' : true ,
89+ 'fastmail.com' : true ,
90+ 'fastmail.com.au' : true ,
91+ 'fastmail.de' : true ,
92+ 'fastmail.es' : true ,
93+ 'fastmail.fm' : true ,
94+ 'fastmail.fr' : true ,
95+ 'fastmail.im' : true ,
96+ 'fastmail.in' : true ,
97+ 'fastmail.jp' : true ,
98+ 'fastmail.mx' : true ,
99+ 'fastmail.net' : true ,
100+ 'fastmail.nl' : true ,
101+ 'fastmail.org' : true ,
102+ 'fastmail.se' : true ,
103+ 'fastmail.to' : true ,
104+ 'fastmail.tw' : true ,
105+ 'fastmail.uk' : true ,
106+ 'fastmail.us' : true ,
107+ 'fastmailbox.net' : true ,
108+ 'fastmessaging.com' : true ,
109+ 'fea.st' : true ,
110+ 'fmail.co.uk' : true ,
111+ 'fmailbox.com' : true ,
112+ 'fmgirl.com' : true ,
113+ 'fmguy.com' : true ,
114+ 'ftml.net' : true ,
115+ 'h-mail.us' : true ,
116+ 'hailmail.net' : true ,
117+ 'imap-mail.com' : true ,
118+ 'imap.cc' : true ,
119+ 'imapmail.org' : true ,
120+ 'inoutbox.com' : true ,
121+ 'internet-e-mail.com' : true ,
122+ 'internet-mail.org' : true ,
123+ 'internetemails.net' : true ,
124+ 'internetmailing.net' : true ,
125+ 'jetemail.net' : true ,
126+ 'justemail.net' : true ,
127+ 'letterboxes.org' : true ,
128+ 'mail-central.com' : true ,
129+ 'mail-page.com' : true ,
130+ 'mailandftp.com' : true ,
131+ 'mailas.com' : true ,
132+ 'mailbolt.com' : true ,
133+ 'mailc.net' : true ,
134+ 'mailcan.com' : true ,
135+ 'mailforce.net' : true ,
136+ 'mailftp.com' : true ,
137+ 'mailhaven.com' : true ,
138+ 'mailingaddress.org' : true ,
139+ 'mailite.com' : true ,
140+ 'mailmight.com' : true ,
141+ 'mailnew.com' : true ,
142+ 'mailsent.net' : true ,
143+ 'mailservice.ms' : true ,
144+ 'mailup.net' : true ,
145+ 'mailworks.org' : true ,
146+ 'ml1.net' : true ,
147+ 'mm.st' : true ,
148+ 'myfastmail.com' : true ,
149+ 'mymacmail.com' : true ,
150+ 'nospammail.net' : true ,
151+ 'ownmail.net' : true ,
152+ 'petml.com' : true ,
153+ 'postinbox.com' : true ,
154+ 'postpro.net' : true ,
155+ 'proinbox.com' : true ,
156+ 'promessage.com' : true ,
157+ 'realemail.net' : true ,
158+ 'reallyfast.biz' : true ,
159+ 'reallyfast.info' : true ,
160+ 'rushpost.com' : true ,
161+ 'sent.as' : true ,
162+ 'sent.at' : true ,
163+ 'sent.com' : true ,
164+ 'speedpost.net' : true ,
165+ 'speedymail.org' : true ,
166+ 'ssl-mail.com' : true ,
167+ 'swift-mail.com' : true ,
168+ 'the-fastest.net' : true ,
169+ 'the-quickest.com' : true ,
170+ 'theinternetemail.com' : true ,
171+ 'veryfast.biz' : true ,
172+ 'veryspeedy.net' : true ,
173+ 'warpmail.net' : true ,
174+ 'xsmail.com' : true ,
175+ 'yepmail.net' : true ,
176+ 'your-mail.com' : true ,
177+ } ;
178+
59179 public constructor ( email : EmailProps ) {
60180 if ( email . address != null && ! isEmail ( email . address ) ) {
61181 throw new ArgumentError ( '`email.address` is an invalid email address' ) ;
@@ -106,6 +226,22 @@ export default class Email implements EmailProps {
106226 localPart = localPart . replace ( / \. / g, '' ) ;
107227 }
108228
229+ const domainParts = domain . split ( '.' ) ;
230+ if ( domainParts . length > 2 ) {
231+ const possibleDomain = domainParts . slice ( 1 ) . join ( '.' ) ;
232+ if (
233+ Object . prototype . hasOwnProperty . call (
234+ Email . fastmailDomains ,
235+ possibleDomain
236+ )
237+ ) {
238+ domain = possibleDomain ;
239+ if ( localPart !== '' ) {
240+ localPart = domainParts [ 0 ] ;
241+ }
242+ }
243+ }
244+
109245 return localPart + '@' + domain ;
110246 }
111247
0 commit comments