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