Completed
Push — master ( a5864f...48babe )
by Lars
03:34
created

EmailCheck::isDnsError()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 3.1406

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
ccs 3
cts 4
cp 0.75
rs 9.4285
cc 3
eloc 5
nc 3
nop 1
crap 3.1406
1
<?php
2
3
namespace voku\helper;
4
5
use TrueBV\Punycode;
6
7
/**
8
 * E-Mail Check Class
9
 *
10
 * -> use "EmailCheck::isValid()" to validate a email-address
11
 *
12
 * @author      Lars Moelleken
13
 * @copyright   Copyright (c) 2015, Lars Moelleken (http://moelleken.org/)
14
 * @license     http://opensource.org/licenses/MIT	MIT License
15
 */
16
class EmailCheck
17
{
18
  /**
19
   * @var array
20
   */
21
  public static $domainsExample = array(
22
      'test.de',
23
      'test.com',
24
      'test.net',
25
      'test.org',
26
      'example.de',
27
      'example.com',
28
      'example.net',
29
      'example.org',
30
  );
31
32
  /**
33
   * @var array
34
   *
35
   * here you can find more domains:
36
   * - https://github.com/vboctor/disposable_email_checker
37
   * - https://gist.github.com/michenriksen/8710649
38
   */
39
  public static $domainsTemporary = array(
40
      '0-mail.com',
41
      '0815.ru',
42
      '0815.ru0clickemail.com',
43
      '0clickemail.com',
44
      '0wnd.net',
45
      '0wnd.org',
46
      '10minutemail.com',
47
      '10minutemail.co.za',
48
      '20minutemail.com',
49
      '2prong.com',
50
      '30minutemail.com',
51
      '33mail.com',
52
      '3d-painting.com',
53
      '4warding.com',
54
      '4warding.net',
55
      '4warding.org',
56
      '60minutemail.com',
57
      '675hosting.com',
58
      '675hosting.net',
59
      '675hosting.org',
60
      '6paq.com',
61
      '6url.com',
62
      '75hosting.com',
63
      '75hosting.net',
64
      '75hosting.org',
65
      '7tags.com',
66
      '9ox.net',
67
      'a-bc.net',
68
      'afrobacon.com',
69
      'ag.us.to',
70
      'ajaxapp.net',
71
      'amilegit.com',
72
      'amiri.net',
73
      'amiriindustries.com',
74
      'anonbox.net',
75
      'anonymbox.com',
76
      'antichef.com',
77
      'antichef.net',
78
      'antispam.de',
79
      'armyspy.com',
80
      'atvclub.msk.ru',
81
      'azmeil.tk',
82
      'baxomale.ht.cx',
83
      'beefmilk.com',
84
      'binkmail.com',
85
      'bio-muesli.net',
86
      'bobmail.info',
87
      'bodhi.lawlita.com',
88
      'bofthew.com',
89
      'bootybay.de',
90
      'boun.cr',
91
      'bouncr.com',
92
      'brefmail.com',
93
      'broadbandninja.com',
94
      'bsnow.net',
95
      'bu.mintemail.com',
96
      'bugmenot.com',
97
      'bumpymail.com',
98
      'casualdx.com',
99
      'centermail.com',
100
      'centermail.net',
101
      'chogmail.com',
102
      'choicemail1.com',
103
      'consumerriot.com',
104
      'cool.fr.nf',
105
      'correo.blogos.net',
106
      'cosmorph.com',
107
      'courriel.fr.nf',
108
      'courrieltemporaire.com',
109
      'crazymailing.com',
110
      'cubiclink.com',
111
      'curryworld.de',
112
      'cust.in',
113
      'cuvox.de',
114
      'dacoolest.com',
115
      'dandikmail.com',
116
      'dayrep.com',
117
      'deadaddress.com',
118
      'deadspam.com',
119
      'despam.it',
120
      'despammed.com',
121
      'devnullmail.com',
122
      'dfgh.net',
123
      'digitalsanctuary.com',
124
      'dingbone.com',
125
      'discardmail.com',
126
      'discardmail.de',
127
      'disposableaddress.com',
128
      'disposableemailaddresses.com',
129
      'disposeamail.com',
130
      'disposemail.com',
131
      'dispostable.com',
132
      'dm.w3internet.co.uk',
133
      'dm.w3internet.co.ukexample.com',
134
      'dodgeit.com',
135
      'dodgit.com',
136
      'dodgit.org',
137
      'doiea.com',
138
      'donemail.ru',
139
      'dontreg.com',
140
      'dontsendmespam.de',
141
      'drdrb.com',
142
      'drdrb.net',
143
      'dump-email.info',
144
      'dumpandjunk.com',
145
      'dumpmail.de',
146
      'dumpyemail.com',
147
      'e-mail.com',
148
      'e4ward.com',
149
      'easytrashmail.com',
150
      'einrot.com',
151
      'email.net',
152
      'email60.com',
153
      'emaildienst.de',
154
      'emailias.com',
155
      'emailigo.de',
156
      'emailinfive.com',
157
      'emailmiser.com',
158
      'emailsensei.com',
159
      'emailtemporario.com.br',
160
      'emailto.de',
161
      'emailwarden.com',
162
      'emailx.at.hm',
163
      'emailxfer.com',
164
      'emeil.in',
165
      'emeil.ir',
166
      'emz.net',
167
      'enterto.com',
168
      'ephemail.net',
169
      'etranquil.com',
170
      'etranquil.net',
171
      'etranquil.org',
172
      'evopo.com',
173
      'explodemail.com',
174
      'fakeinbox.com',
175
      'fakeinformation.com',
176
      'fansworldwide.de',
177
      'fastacura.com',
178
      'fastchevy.com',
179
      'fastchrysler.com',
180
      'fastkawasaki.com',
181
      'fastmazda.com',
182
      'fastmitsubishi.com',
183
      'fastnissan.com',
184
      'fastsubaru.com',
185
      'fastsuzuki.com',
186
      'fasttoyota.com',
187
      'fastyamaha.com',
188
      'filzmail.com',
189
      'fixmail.tk',
190
      'fizmail.com',
191
      'fleckens.hu',
192
      'fr33mail.info',
193
      'frapmail.com',
194
      'front14.org',
195
      'fudgerub.com',
196
      'fux0ringduh.com',
197
      'garliclife.com',
198
      'gelitik.in',
199
      'get1mail.com',
200
      'get2mail.fr',
201
      'getairmail.com',
202
      'getonemail.com',
203
      'getonemail.net',
204
      'ghosttexter.de',
205
      'girlsundertheinfluence.com',
206
      'gishpuppy.com',
207
      'goemailgo.com',
208
      'gowikibooks.com',
209
      'gowikicampus.com',
210
      'gowikicars.com',
211
      'gowikifilms.com',
212
      'gowikigames.com',
213
      'gowikimusic.com',
214
      'gowikinetwork.com',
215
      'gowikitravel.com',
216
      'gowikitv.com',
217
      'great-host.in',
218
      'greensloth.com',
219
      'grr.la',
220
      'gsrv.co.uk',
221
      'guerillamail.biz',
222
      'guerillamail.com',
223
      'guerillamail.net',
224
      'guerillamail.org',
225
      'guerrillamail.biz',
226
      'guerrillamail.com',
227
      'guerrillamail.de',
228
      'guerrillamail.net',
229
      'guerrillamail.org',
230
      'guerrillamailblock.com',
231
      'gustr.com',
232
      'h.mintemail.com',
233
      'h8s.org',
234
      'haltospam.com',
235
      'hatespam.org',
236
      'hidemail.de',
237
      'hidzz.com',
238
      'hochsitze.com',
239
      'hotpop.com',
240
      'hulapla.de',
241
      'ieatspam.eu',
242
      'ieatspam.info',
243
      'ieh-mail.de',
244
      'ihateyoualot.info',
245
      'iheartspam.org',
246
      'imails.info',
247
      'inbax.tk',
248
      'inbox.si',
249
      'inbox2.info',
250
      'inboxalias.com',
251
      'inboxclean.com',
252
      'inboxclean.org',
253
      'incognitomail.com',
254
      'incognitomail.net',
255
      'incognitomail.org',
256
      'insorg-mail.info',
257
      'ipoo.org',
258
      'irish2me.com',
259
      'iwi.net',
260
      'jetable.com',
261
      'jetable.fr.nf',
262
      'jetable.net',
263
      'jetable.org',
264
      'jnxjn.com',
265
      'jourrapide.com',
266
      'junk1e.com',
267
      'kasmail.com',
268
      'kaspop.com',
269
      'keepmymail.com',
270
      'killmail.com',
271
      'killmail.net',
272
      'kir.ch.tc',
273
      'klassmaster.com',
274
      'klassmaster.net',
275
      'klzlk.com',
276
      'koszmail.pl',
277
      'kulturbetrieb.info',
278
      'kurzepost.de',
279
      'letthemeatspam.com',
280
      'lhsdv.com',
281
      'lifebyfood.com',
282
      'link2mail.net',
283
      'litedrop.com',
284
      'lol.ovpn.to',
285
      'lookugly.com',
286
      'lopl.co.cc',
287
      'lortemail.dk',
288
      'lr78.com',
289
      'm4ilweb.info',
290
      'ma1l.bij.pl',
291
      'maboard.com',
292
      'mail-temporaire.fr',
293
      'mail.by',
294
      'mail.mezimages.net',
295
      'mail2rss.org',
296
      'mail333.com',
297
      'mail4trash.com',
298
      'mailbidon.com',
299
      'mailblocks.com',
300
      'mailcatch.com',
301
      'maildrop.cc',
302
      'maileater.com',
303
      'mailed.in',
304
      'mailexpire.com',
305
      'mailfa.tk',
306
      'mailfreeonline.com',
307
      'mailimate.com',
308
      'mailin8r.com',
309
      'mailinater.com',
310
      'mailinator.com',
311
      'mailinator.net',
312
      'mailinator2.com',
313
      'mailincubator.com',
314
      'mailismagic.com',
315
      'mailme.ir',
316
      'mailme.lv',
317
      'mailmetrash.com',
318
      'mailmoat.com',
319
      'mailnator.com',
320
      'mailnesia.com',
321
      'mailnull.com',
322
      'mailshell.com',
323
      'mailsiphon.com',
324
      'mailslite.com',
325
      'mailtemp.info',
326
      'mailtothis.com',
327
      'mailzilla.com',
328
      'mailzilla.org',
329
      'mbx.cc',
330
      'mega.zik.dj',
331
      'meinspamschutz.de',
332
      'meltmail.com',
333
      'messagebeamer.de',
334
      'mierdamail.com',
335
      'mintemail.com',
336
      'mjukglass.nu',
337
      'mobi.web.id',
338
      'moburl.com',
339
      'moncourrier.fr.nf',
340
      'monemail.fr.nf',
341
      'monmail.fr.nf',
342
      'monumentmail.com',
343
      'msa.minsmail.com',
344
      'mt2009.com',
345
      'mt2014.com',
346
      'mx0.wwwnew.eu',
347
      'mycleaninbox.net',
348
      'mypartyclip.de',
349
      'myphantomemail.com',
350
      'myspaceinc.com',
351
      'myspaceinc.net',
352
      'myspaceinc.org',
353
      'myspacepimpedup.com',
354
      'myspamless.com',
355
      'mytempemail.com',
356
      'mytrashmail.com',
357
      'naver.com',
358
      'neomailbox.com',
359
      'nepwk.com',
360
      'nervmich.net',
361
      'nervtmich.net',
362
      'netmails.com',
363
      'netmails.net',
364
      'netzidiot.de',
365
      'neverbox.com',
366
      'no-spam.ws',
367
      'nobulk.com',
368
      'noclickemail.com',
369
      'nogmailspam.info',
370
      'nomail.xl.cx',
371
      'nomail2me.com',
372
      'nomorespamemails.com',
373
      'nospam.ze.tc',
374
      'nospam4.us',
375
      'nospamfor.us',
376
      'nospamthanks.info',
377
      'notmailinator.com',
378
      'nowmymail.com',
379
      'nullbox.info',
380
      'nurfuerspam.de',
381
      'nus.edu.sg',
382
      'nwldx.com',
383
      'objectmail.com',
384
      'obobbo.com',
385
      'odaymail.com',
386
      'oneoffemail.com',
387
      'onewaymail.com',
388
      'onlatedotcom.info',
389
      'online.ms',
390
      'oopi.org',
391
      'opayq.com',
392
      'ordinaryamerican.net',
393
      'otherinbox.com',
394
      'ourklips.com',
395
      'outlawspam.com',
396
      'ovpn.to',
397
      'owlpic.com',
398
      'pancakemail.com',
399
      'pimpedupmyspace.com',
400
      'pjjkp.com',
401
      'plexolan.de',
402
      'politikerclub.de',
403
      'poofy.org',
404
      'pookmail.com',
405
      'privacy.net',
406
      'privymail.de',
407
      'proxymail.eu',
408
      'prtnx.com',
409
      'punkass.com',
410
      'putthisinyourspamdatabase.com',
411
      'qq.com',
412
      'quickinbox.com',
413
      'rcpt.at',
414
      'reallymymail.com',
415
      'recode.me',
416
      'recursor.net',
417
      'regbypass.com',
418
      'regbypass.comsafe-mail.net',
419
      'rejectmail.com',
420
      'rhyta.com',
421
      'rklips.com',
422
      'rmqkr.net',
423
      'rppkn.com',
424
      'rtrtr.com',
425
      's0ny.net',
426
      'safe-mail.net',
427
      'safersignup.de',
428
      'safetymail.info',
429
      'safetypost.de',
430
      'sandelf.de',
431
      'saynotospams.com',
432
      'selfdestructingmail.com',
433
      'selfdestructingmail.org',
434
      'sendspamhere.com',
435
      'sharklasers.com',
436
      'shieldedmail.com',
437
      'shiftmail.com',
438
      'shitmail.me',
439
      'shortmail.net',
440
      'sibmail.com',
441
      'sify.com',
442
      'skeefmail.com',
443
      'slaskpost.se',
444
      'slopsbox.com',
445
      'slushmail.com',
446
      'smaakt.naar.gravel',
447
      'smapfree24.com',
448
      'smapfree24.de',
449
      'smapfree24.eu',
450
      'smapfree24.info',
451
      'smapfree24.org',
452
      'smashmail.de',
453
      'smellfear.com',
454
      'snakemail.com',
455
      'sneakemail.com',
456
      'sofimail.com',
457
      'sofort-mail.de',
458
      'sogetthis.com',
459
      'soodonims.com',
460
      'spam.la',
461
      'spam.su',
462
      'spam4.me',
463
      'spamavert.com',
464
      'spambob.com',
465
      'spambob.net',
466
      'spambob.org',
467
      'spambog.com',
468
      'spambog.de',
469
      'spambog.net',
470
      'spambog.ru',
471
      'spambox.info',
472
      'spambox.irishspringrealty.com',
473
      'spambox.org',
474
      'spambox.us',
475
      'spamcannon.com',
476
      'spamcannon.net',
477
      'spamcero.com',
478
      'spamcon.org',
479
      'spamcorptastic.com',
480
      'spamcowboy.com',
481
      'spamcowboy.net',
482
      'spamcowboy.org',
483
      'spamday.com',
484
      'spamex.com',
485
      'spamfree.eu',
486
      'spamfree24.com',
487
      'spamfree24.de',
488
      'spamfree24.eu',
489
      'spamfree24.info',
490
      'spamfree24.net',
491
      'spamfree24.org',
492
      'spamgoes.in',
493
      'spamgourmet.com',
494
      'spamgourmet.net',
495
      'spamgourmet.org',
496
      'spamherelots.com',
497
      'spamhereplease.com',
498
      'spamhole.com',
499
      'spamify.com',
500
      'spaminator.de',
501
      'spamkill.info',
502
      'spaml.com',
503
      'spaml.de',
504
      'spammotel.com',
505
      'spamobox.com',
506
      'spamoff.de',
507
      'spamslicer.com',
508
      'spamspot.com',
509
      'spamthis.co.uk',
510
      'spamthisplease.com',
511
      'spamtrail.com',
512
      'speed.1s.fr',
513
      'squizzy.de',
514
      'supergreatmail.com',
515
      'supermailer.jp',
516
      'superrito.com',
517
      'suremail.info',
518
      'tagyourself.com',
519
      'teewars.org',
520
      'teleworm.com',
521
      'teleworm.us',
522
      'tempalias.com',
523
      'tempe-mail.com',
524
      'tempemail.biz',
525
      'tempemail.com',
526
      'tempemail.net',
527
      'tempinbox.co.uk',
528
      'tempinbox.com',
529
      'temp-mail.ru',
530
      'tempmail.it',
531
      'tempmail2.com',
532
      'tempomail.fr',
533
      'temporarily.de',
534
      'temporarioemail.com.br',
535
      'temporaryemail.net',
536
      'temporaryforwarding.com',
537
      'temporaryinbox.com',
538
      'tempymail.com',
539
      'thanksnospam.info',
540
      'thankyou2010.com',
541
      'thisisnotmyrealemail.com',
542
      'throwawayemailaddress.com',
543
      'throam.com',
544
      'tilien.com',
545
      'tmail.com',
546
      'tmailinator.com',
547
      'toiea.com',
548
      'tradermail.info',
549
      'trash-amil.com',
550
      'trash-mail.at',
551
      'trash-mail.com',
552
      'trash-mail.de',
553
      'trash2009.com',
554
      'trashemail.de',
555
      'trashmail.at',
556
      'trashmail.com',
557
      'trashmail.de',
558
      'trashmail.me',
559
      'trashmail.net',
560
      'trashmail.org',
561
      'trashmail.ws',
562
      'trashmailer.com',
563
      'trashymail.com',
564
      'trashymail.net',
565
      'trbvm.com',
566
      'trillianpro.com',
567
      'turual.com',
568
      'twinmail.de',
569
      'tyldd.com',
570
      'uggsrock.com',
571
      'upliftnow.com',
572
      'uplipht.com',
573
      'venompen.com',
574
      'veryrealemail.com',
575
      'vidchart.com',
576
      'viditag.com',
577
      'viewcastmedia.com',
578
      'viewcastmedia.net',
579
      'viewcastmedia.org',
580
      'webm4il.info',
581
      'wegwerfadresse.de',
582
      'wegwerfemail.de',
583
      'wegwerfmail.de',
584
      'wegwerfmail.net',
585
      'wegwerfmail.org',
586
      'wetrainbayarea.com',
587
      'wetrainbayarea.org',
588
      'wh4f.org',
589
      'whatiaas.com',
590
      'whatpaas.com',
591
      'whyspam.me',
592
      'willselfdestruct.com',
593
      'winemaven.info',
594
      'wronghead.com',
595
      'wuzup.net',
596
      'wuzupmail.net',
597
      'www.e4ward.com',
598
      'www.gishpuppy.com',
599
      'www.mailinator.com',
600
      'wwwnew.eu',
601
      'xagloo.co',
602
      'xagloo.com',
603
      'xemaps.com',
604
      'xents.com',
605
      'xmail.com',
606
      'xmaily.com',
607
      'xoxy.net',
608
      'yep.it',
609
      'yogamaven.com',
610
      'yopmail.com',
611
      'yopmail.fr',
612
      'yopmail.net',
613
      'ypmail.webarnak.fr.eu.org',
614
      'yuurok.com',
615
      'zehnminutenmail.de',
616
      'zippymail.info',
617
      'zoaxe.com',
618
      'zoemail.com',
619
      'zoemail.org',
620
  );
621
622
  /**
623
   * @var array
624
   */
625
  public static $domainsTypo = array(
626
      '',
627
      '-online.de',
628
      '-tonline.de',
629
      'acor.de',
630
      'aecor.de',
631
      'ahoo.de',
632
      'al.com',
633
      'ao.com',
634
      'aol.cm',
635
      'aol.con',
636
      'aol.ocm',
637
      'aol.om',
638
      'aoll.com',
639
      'apl.com',
640
      'arco.de',
641
      'arocr.de',
642
      'aror.de',
643
      'feenet.de',
644
      'freeenet.de',
645
      'freeent.de',
646
      'freeet.de',
647
      'freemet.de',
648
      'freeneet.de',
649
      'freent.de',
650
      'frenet.de',
651
      'gm.de',
652
      'gm.net',
653
      'gm.xde',
654
      'gmc.de',
655
      'gmx.ded',
656
      'gmx.dw',
657
      'gmxx.de',
658
      'gmy.de',
659
      'gx.de',
660
      'hmx.de',
661
      'homail.de',
662
      'hotmai.de',
663
      'hotmal.de',
664
      'mx.de',
665
      'mx.net',
666
      'otmail.com',
667
      'r-online.de',
668
      'rcor.de',
669
      'reenet.de',
670
      't--online.de',
671
      't-0nline.de',
672
      't-nline.de',
673
      't-oline.de',
674
      't-omline.de',
675
      't-onine.de',
676
      't-onlien.de',
677
      't-onliine.de',
678
      't-onlin.de',
679
      't-onlinde.de',
680
      't-onlinr.de',
681
      't-onlione.de',
682
      't-onlline.de',
683
      't-onlne.de',
684
      't-onlone.de',
685
      't.-online.de',
686
      't.online.de',
687
      'tonline.de',
688
      'wb.de',
689
      'we.de',
690
      'web.ded',
691
      'web.dw',
692
      'wed.de',
693
      'weeb.de',
694
      'wen.de',
695
      'wweb.de',
696
      'yaho.de',
697
      'yahooo.de',
698
      'yaoo.de',
699
      'yhoo.de',
700
      'yahhoo.de',
701
  );
702
703
  /**
704
   * @var bool
705
   */
706
  protected static $useDnsCheck = true;
707
708
  /**
709
   * Check if the email is valid.
710
   *
711
   * @param string     $email
712
   * @param bool|true  $useExampleDomainCheck
713
   * @param bool|true  $useTypoInDomainCheck
714
   * @param bool|true  $useTemporaryDomainCheck
715
   * @param bool|false $useDnsCheck (do not use, if you don't need it)
716
   *
717
   * @return bool
718
   */
719 139
  public static function isValid($email, $useExampleDomainCheck = false, $useTypoInDomainCheck = false, $useTemporaryDomainCheck = false, $useDnsCheck = false)
720
  {
721
    if (
722 139
        !is_string($email) // must be a string
723 139
        ||
724 139
        strpos($email, ' ') !== false // no space allowed
725 139
        ||
726 115
        strlen($email) >= 320 // make sure string length is limited to avoid DOS attacks
727 139
    ) {
728 25
      return false;
729
    }
730
731 115
    $email = str_replace(array('.', '@'), array('.', '@'), $email); // non-Latin chars are also allowed | https://tools.ietf.org/html/rfc6530
732
    if (
733 115
      (strpos($email, '@') === false)
734
      ||
735 112
      (strpos($email, '.') === false && strpos($email, ':') === false) // dot or colon is needed
736 115
    ) {
737 26
      return false;
738
    }
739
740 92
    if (!preg_match('/^(.*<?)(.*)@(.*)(>?)$/', $email, $parts)) {
741 1
      return false;
742
    } else {
743
744 91
      list($email, $localFirst, $localSecond, $domain) = $parts;
745
746
      if (
747 91
          function_exists('idn_to_ascii')
748 91
          &&
749 91
          UTF8::max_chr_width($email) <= 3 // check for unicode chars with more then 3 bytes
750 91
      ) {
751
752 90
        $localFirstTmp = idn_to_ascii($localFirst);
753 90
        if ($localFirstTmp) {
754 83
          $localFirst = $localFirstTmp;
755 83
        }
756
757 90
        $domainTmp = idn_to_ascii($domain);
758 90
        if ($domainTmp) {
759 86
          $domain = $domainTmp;
760 86
        }
761
762 90
      } else {
763
764 1
        static $punycode = null;
765 1
        if ($punycode === null) {
766 1
          $punycode = new Punycode();
767 1
        }
768
769 1
        $localFirst = $punycode->encode($localFirst);
770 1
        $domain = $punycode->encode($domain);
771
      }
772
773 91
      $email = $localFirst . $localSecond . '@' . $domain . $parts[4];
774
775 91
      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
776 54
        return false;
777
      } else {
778 38
        $valid = true;
779
      }
780
781 38
      if ($useExampleDomainCheck === true && self::isExampleDomain($domain) === true) {
782 2
        return false;
783
      }
784
785 38
      if ($useTypoInDomainCheck === true && self::isTypoInDomain($domain) === true) {
786 1
        return false;
787
      }
788
789 38
      if ($useTemporaryDomainCheck === true && self::isTemporaryDomain($domain) === true) {
790
        return false;
791
      }
792
793 38
      if ($useDnsCheck === true && self::isDnsError($domain) === true) {
794 3
        return false;
795
      }
796
797
    }
798
799
800 35
    return $valid;
801
  }
802
803
  /**
804
   * Check if the domain is a example domain.
805
   *
806
   * @param string $domain
807
   *
808
   * @return bool
809
   */
810 2
  public static function isExampleDomain($domain)
811
  {
812 2
    if (in_array($domain, self::$domainsExample, true)) {
813 2
      return true;
814
    } else {
815 2
      return false;
816
    }
817
  }
818
819
  /**
820
   * Check if the domain has a typo.
821
   *
822
   * @param string $domain
823
   *
824
   * @return bool
825
   */
826 3
  public static function isTypoInDomain($domain)
827
  {
828 3
    if (in_array($domain, self::$domainsTypo, true)) {
829 2
      return true;
830
    } else {
831 3
      return false;
832
    }
833
  }
834
835
  /**
836
   * Check if the domain is a temporary domain.
837
   *
838
   * @param string $domain
839
   *
840
   * @return bool
841
   */
842 3
  public static function isTemporaryDomain($domain)
843
  {
844 3
    if (in_array($domain, self::$domainsTemporary, true)) {
845 1
      return true;
846
    } else {
847 3
      return false;
848
    }
849
  }
850
851
  /**
852
   * Check if the domain has a typo.
853
   *
854
   * @param string $domain
855
   *
856
   * @return bool|null will return null if we can't use the "checkdnsrr"-function
857
   *
858
   * @throws \Exception
859
   */
860 4
  public static function isDnsError($domain)
861
  {
862 4
    if (function_exists('checkdnsrr')) {
863 4
      return !checkdnsrr($domain . '.', 'MX') || !checkdnsrr($domain, 'A');
864
    } else {
865
      throw new \Exception(' Can\'t call checkdnsrr');
866
    }
867
  }
868
}
869