1<?php
2
3class disposablemailblock extends phplistPlugin {
4  public $name = "Disposable email address blocker";
5  public $coderoot = '';
6  public $version = "0.1";
7  public $authors = 'Michiel Dethmers';
8  public $enabled = 1;
9  public $description = 'Disallows signing up to the newsletter with a disposable email';
10  public $documentationUrl = 'https://resources.phplist.com/plugin/preventdisposable';
11
12  ## more to add: http://www.spambog.com/en/instructions.htm
13
14  private $disposable_domains = array(
15    ## mailinator
16    'mailinator.com',
17    'supergreatmail.com',
18    'spamthisplease.com',
19    'letthemeatspam.com',
20    'chammy.info',
21    'devnullmail.com',
22    'bobmail.info',
23    'sendspamhere.com',
24    'spamherelots.com',
25    'sogetthis.com',
26    'mailinator.net',
27    'safetymail.info',
28    'binkmail.com',
29    'tradermail.info',
30    'thisisnotmyrealemail.com',
31    'veryrealemail.com',
32    'mailinator2.com',
33    'notmailinator.com',
34    'zippymail.info',
35    'suremail.info',
36    'mailismagic.com',
37    'mailtothis.com',
38    'reallymymail.com',
39    'mailtothis.com',
40    'monumentmail.com',
41    'spambooger.com',
42
43
44    ## and a mailinator copycat
45    'mytrashmail.com',
46    'mt2014.com',
47    'thankyou2010.com',
48    'thankyou2010.com',
49    'trash2009.com',
50    'mt2009.com',
51    'trashymail.com',
52    'mytrashmail.com',
53    'mailmetrash.com',
54
55    ## and another one
56    'spamfree24.org',
57
58    ## there are too many :-(
59    # guerrillamail.com
60    'sharklasers.com',
61    'guerrillamailblock.com',
62    'guerrillamail.com',
63    'guerrillamail.net',
64    'guerrillamail.biz',
65    'guerrillamail.org',
66    'guerrillamail.de',
67    'spam4.me',
68
69    'fakeinbox.com',
70
71    # getairmail.com
72    'getairmail.com',
73    'vidchart.com',
74    'dealja.com',
75    'consumerriot.com',
76    'tagyourself.com',
77    'whatiaas.com',
78    'yyou.co.uk',
79    'whatsaas.com',
80    'whatiaas.com',
81    'whatpaas.com',
82    'broadbandninja.com',
83
84    'dispostable.com',
85
86    #yopmail.com
87    'yopmail.com',
88    'yopmail.fr',
89    'yopmail.net',
90    'cool.fr.nf',
91    'jetable.fr.nf',
92    'nospam.ze.tc',
93    'nomail.xl.cx',
94    'mega.zik.dj',
95    'speed.1s.fr',
96    'courriel.fr.nf',
97    'moncourrier.fr.nf',
98    'monemail.fr.nf',
99    'monmail.fr.nf',
100    'ypmail.webarnak.fr.eu.org',
101
102    # 10minutemail.com
103    'rmqkr.net',
104    '10minutemail.com',
105    'drdrb.net',
106
107    'br.mintemail.com',
108
109    'mailcatch.com',
110    '1800newcareer.co.cc',
111    'b.pythonboard.de',
112    'etsnt.co.uk',
113    'gaudiumetspes.happyforever.com',
114    'harvard.edu.tr.vu',
115    'lowiq.linux-board.com',
116    'mailcatch.com',
117    'mailcatch.legendoftavlon.com',
118    'mailcatch.loveafraid.com.ar',
119    'mailsto.co.cc',
120    'rockuniverze.co.cc',
121
122    ##fakemailgenerator.com
123    'cuvox.de',
124    'armspy.com',
125    'dayrep.com',
126    'einrot.com',
127    'fleckens.hu',
128    'gustr.com',
129    'jourrapide.com',
130    'rhyta.com',
131    'superrito.com',
132    'teleworm.us',
133
134    ##from https://github.com/ivolo/disposable-email-domains
135    '0x01.gq',
136    '0x01.tk',
137    '10mail.org',
138    '33m.co',
139    '33mail.com',
140    '3utilities.com',
141    'acusupply.com',
142    'adultvidlite.com',
143    'aji.kr',
144    'anonaddy.com',
145    'anonaddy.me',
146    'anonbox.net',
147    'anyalias.com',
148    'bandband1.com',
149    'bei.kr',
150    'bel.kr',
151    'beo.kr',
152    'bfo.kr',
153    'bho.kr',
154    'biz.st',
155    'bko.kr',
156    'blueauramassage.com',
157    'bum.net',
158    'cad.edu.gr',
159    'chickenkiller.com',
160    'cid.kr',
161    'cko.kr',
162    'cloudns.asia',
163    'cloudns.cc',
164    'cloudns.cx',
165    'coms.hk',
166    'creou.dev',
167    'cu.cc',
168    'dbo.kr',
169    'ddns.net',
170    'defaultdomain.ml',
171    'dko.kr',
172    'dmtc.edu.pl',
173    'dns-cloud.net',
174    'dnsabr.com',
175    'dnses.ro',
176    'doy.kr',
177    'drope.ml',
178    'dropmail.me',
179    'dzalaev-advokat.ru',
180    'e4ward.com',
181    'edu.auction',
182    'efo.kr',
183    'eho.kr',
184    'ely.kr',
185    'email-temp.com',
186    'emailfake.com',
187    'emailfake.ml',
188    'emailfreedom.ml',
189    'emlhub.com',
190    'emlpro.com',
191    'emltmp.com',
192    'emy.kr',
193    'enu.kr',
194    'eny.kr',
195    'escritossad.net',
196    'ese.kr',
197    'esy.es',
198    'ewa.kr',
199    'exi.kr',
200    'fackme.gq',
201    'fassagforpresident.ga',
202    'firste.ml',
203    'flu.cc',
204    'foy.kr',
205    'gmail.gr.com',
206    'gmeil.me',
207    'gok.kr',
208    'grigio.cf',
209    'haddo.eu',
210    'higogoya.com',
211    'hix.kr',
212    'hiz.kr',
213    'hmail.us',
214    'hopto.org',
215    'hostingarif.me',
216    'idn.vn',
217    'iesco.info',
218    'igg.biz',
219    'iki.kr',
220    'ilovemyniggers.club',
221    'imouto.pro',
222    'info.tm',
223    'irr.kr',
224    'it2-mail.tk',
225    'jil.kr',
226    'jto.kr',
227    'junnuok.com',
228    'justemail.ml',
229    'kadokawa.top',
230    'kro.kr',
231    'lal.kr',
232    'laste.ml',
233    'lbe.kr',
234    'lei.kr',
235    'lko.co.kr',
236    'lko.kr',
237    'll47.net',
238    'lofteone.ru',
239    'lom.kr',
240    'lostandalone.com',
241    'loudcannabisapp.com',
242    'loy.kr',
243    'luk2.com',
244    'luksarcenter.ru',
245    'luo.kr',
246    'lyrics-lagu.me',
247    'mail-temp.com',
248    'mail0.ga',
249    'marrone.cf',
250    'mbe.kr',
251    'mebelnovation.ru',
252    'mintemail.com',
253    'mko.kr',
254    'mlo.kr',
255    'mooo.com',
256    'mp-j.cf',
257    'mp-j.ga',
258    'mp-j.gq',
259    'mp-j.ml',
260    'mp-j.tk',
261    'mr-meshkat.com',
262    'mrossi.cf',
263    'mrossi.gq',
264    'mrossi.ml',
265    'msdc.co',
266    'museumplanet.com',
267    'my.id',
268    'my3mail.cf',
269    'my3mail.ga',
270    'my3mail.gq',
271    'my3mail.ml',
272    'my3mail.tk',
273    'myeslbookclub.com',
274    'mymy.cf',
275    'mysafe.ml',
276    'nafko.cf',
277    'netricity.nl',
278    'nko.kr',
279    'npv.kr',
280    'nuo.co.kr',
281    'nuo.kr',
282    'nut.cc',
283    'oazis.site',
284    'obo.kr',
285    'okezone.bid',
286    'one.pl',
287    'oovy.org',
288    'orangotango.ml',
289    'otherinbox.com',
290    'owa.kr',
291    'owh.ooo',
292    'oyu.kr',
293    'pafnuty.com',
294    'poderosamulher.com',
295    'porco.cf',
296    'poy.kr',
297    'probatelawarizona.com',
298    'pubgm.website',
299    'qbi.kr',
300    'ragel.me',
301    'rao.kr',
302    'rko.kr',
303    'rosso.ml',
304    'row.kr',
305    'safe-mail.gq',
306    'sagun.info',
307    'sborra.tk',
308    'seluang.com',
309    'shp7.cn',
310    'siambretta.com',
311    'skodaauto.cf',
312    'solidplai.us',
313    'spamtrap.ro',
314    'ssanphone.me',
315    'statuspage.ga',
316    'stonedogdigital.com',
317    'stop-my-spam.pp.ua',
318    'storeyee.com',
319    'supere.ml',
320    'svblog.com',
321    'sytes.net',
322    'tandy.co',
323    'tempremail.cf',
324    'tempremail.tk',
325    'tgwrzqr.top',
326    'thepieter.com',
327    'thinktimessolve.info',
328    'thumoi.com',
329    'tko.co.kr',
330    'tko.kr',
331    'tmo.kr',
332    'toi.kr',
333    'tourbalitravel.com',
334    'traveldesk.com',
335    'trillianpro.com',
336    'uha.kr',
337    'uko.kr',
338    'umy.kr',
339    'uny.kr',
340    'uola.org',
341    'upy.kr',
342    'us.to',
343    'usa.cc',
344    'uu.gl',
345    'uvy.kr',
346    'uyu.kr',
347    'vay.kr',
348    'vba.kr',
349    'veo.kr',
350    'viola.gq',
351    'volvo-xc.tk',
352    'web.id',
353    'weprof.it',
354    'wil.kr',
355    'xxi2.com',
356    'ye.vc',
357    'yertxenor.tk',
358    'yomail.info',
359    'zalvisual.us',
360    'zeroe.ml',
361
362
363  );
364
365
366  function __construct() {
367    parent::phplistplugin();
368  }
369
370  function adminmenu() {
371    return array(
372    );
373  }
374
375  function upgrade($previous) {
376    parent::upgrade($previous);
377    return true;
378  }
379
380  function isYahooDisposable($address) {
381    if (strpos($address,'@') !== false) {
382      list($user,$domain) = explode('@',$address);
383      if (stripos($domain,'yahoo') !== false) {
384        return preg_match('/^[\w+]-[\w+]@/',$user);
385      }
386    }
387    return false;
388  }
389
390  function isDisposable($address) {
391    if ($this->isYahooDisposable($address)) {
392      return true;
393    }
394    if (strpos($address,'@') !== false) {
395      list($user,$domain) = explode('@',$address);
396      return in_array(strtolower($domain),$this->disposable_domains);
397    }
398    return false;
399  }
400
401  function displaySubscribepageEdit($data) {
402
403    if (!isset($data['disposable_mailblocker_text'])) {
404      $data['disposable_mailblocker_text'] = s('Please enter a valid email address to subscribe to our newsletters');
405    }
406    if (isset($data['disposable_mailblocker_enable'])) {
407      $enabled = 'checked="checked"';
408    } else {
409      $enabled  = '';
410    }
411
412    $enableHTML = s('Enable disposable email address blocker').': <input type="checkbox" name="disposable_mailblocker_enable" value="1" '.$enabled.' />';
413    $errorMSG = s('Enter text to display when blocked'). ': <input type="text" name="disposable_mailblocker_text" value="'.htmlspecialchars($data['disposable_mailblocker_text']).'" />';
414    return $enableHTML.'<br/>'.$errorMSG;
415  }
416
417  function processSubscribePageEdit($id) {
418
419    if (!empty($_POST['disposable_mailblocker_enable'])) {
420      $enabled = 1;
421    } else {
422      $enabled = 1;
423    }
424
425    Sql_Query(sprintf('replace into %s (id,name,data) values(%d,"disposable_mailblocker_enable","%s")',
426       $GLOBALS['tables']["subscribepage_data"],$id,sql_escape($enabled)));
427    Sql_Query(sprintf('replace into %s (id,name,data) values(%d,"disposable_mailblocker_text","%s")',
428       $GLOBALS['tables']["subscribepage_data"],$id,sql_escape($_POST['disposable_mailblocker_text'])));
429  }
430
431
432  function displaySubscriptionChoice($pageData, $userID = 0) {
433    return;
434  }
435
436  function validateSubscriptionPage($pageData) {
437    if (!empty($pageData['disposable_mailblocker_enable']) && isset($_POST['email'])) {
438      if ($this->isDisposable($_POST['email'])) {
439        if (!empty($pageData['disposable_mailblocker_text'])) {
440          return $pageData['disposable_mailblocker_text'];
441        } else {
442          return s('Please enter a valid email address to subscribe to our newsletters');
443        }
444      }
445    }
446    return '';
447  }
448
449  function canSend($messagedata,$subscriberdata) {
450      if ($this->isDisposable($subscriberdata['email'])) {
451          return false;
452      }
453      return true;
454
455  }
456
457  function validateEmailAddress($emailAddress) {
458     if ($this->isDisposable($emailAddress)) {
459         return false;
460     }
461     return true;
462  }
463
464
465}
466