PHP script
1Heeft iemand een php script om fake email adressen te filteren uit een nieuwsbrief csv bestand. Het bestand heeft slechts 1 kolom ' Het emailaders ' .
Zoiets?vampirelord schreef:Heeft iemand een php script om fake email adressen te filteren uit een nieuwsbrief csv bestand. Het bestand heeft slechts 1 kolom ' Het emailaders ' .
Code: Selecteer alles
function checkmail($mail)
{
// http://www.phphulp.nl/php/scripts/8/191/
$email_host = explode("@", $mail);
$email_host = $email_host['1'];
$email_resolved = gethostbyname($email_host);
if ($email_resolved != $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$mail))
$valid = "hoi";
return $valid;
}
Wil je zelf je eigen webwinkel maken? Met JouwWeb is dat heel eenvoudig! Dankzij een slimme keuzehulp ontwerp je zelf je eigen thema of huisstijl. De software is technisch volledig doorontwikkeld en naast het Nederlands ook in het Engels beschikbaar. Ruim 250.000 ondernemers gingen je voor!
Dan ga je adressen afkeuren die mogelijk wel geldig zijn. Volgens de RFC is een MX record niet verplicht, al bestaat ie in 99,9% van de gevallen wel. Als er geen MX is, dan wordt het eerste A record gebruikt, en als daar inderdaad een mailserver luitstert, dan werkt alles normaal.Ward schreef:Bijna goed, alleen zou ik getmxrr() toevoegen voor een controle op records voor Mail eXchange (MX).
Deze regex gaat in de praktijk trouwens ook niet altijd goed. Er zijn mensen met een e-mailadres waar het laatste teken van de gebruikersnaam een _ is. Dus user_@domain.tld. Deze komt niet door deze controle maar wordt wel gebruikt (en werkt ook). Of het volgens de RFC mag heb ik niet gecontroleerd.pietpatat schreef:Code: Selecteer alles
eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-
Code: Selecteer alles
<?php
/**
* E-mailadres valideren
*
* @author Ward van der Put <php@pc-boeken.nl>
* @license http://creativecommons.org/licenses/by/3.0/
* @version 4
*
* @param string $str
* @return boolean
*/
function is_emailadres($str)
{
/**
* Een e-mailadres moet een alfanumerieke string zijn.
*/
if (!is_string($str) or is_numeric($str)) {
return false;
}
/**
* Een e-mailadres kan niet korter zijn dan 7 karakters
* en mag niet langer zijn dan 256 karakters.
*/
if ((strlen($str) < 7) or (strlen($str) > 256)) {
return false;
}
/**
* E-mailadres valideren met een inputfilter
*
* @link http://www.php.net/manual/en/function.filter-var.php
*/
if (!filter_var($str, FILTER_VALIDATE_EMAIL)) {
return false;
}
/**
* E-mailadres valideren met een reguliere expressie
*
* Deze reguliere expressie accepteert lange TLD's van 6 karakters
* (bijvoorbeeld .museum) en nieuwe geo TLD's van 7 of 8 karakters
* (bijvoorbeeld .ottawa, .hamburg en .saarland).
*
* @link http://wiki.phpfreakz.nl/Invoer_validatie
* @link http://www.php.net/manual/en/function.preg-match.php
*/
if (!preg_match('#^[a-z0-9][a-z0-9_.\-]*@([a-z0-9]+\.)*[a-z0-9]?[a-z0-9\-]+\.([a-z]{2,8})$#i', $str)) {
return false;
}
/**
* E-mailadres uitsplitsen in een geïndexeerde array.
*/
$aEmailadres = explode('@', $str);
/**
* Het e-mailadres moet nu uit twee onderdelen bestaan:
* een lokale naam en een hostnaam.
*/
if (count($aEmailadres) != 2) {
return false;
}
/**
* De lokale naam mag niet langer zijn dan 64 karakters.
*/
if (strlen($aEmailadres[0]) > 64) {
return false;
}
/**
* DNS voor SMTP
*
* Als er een MX-record wordt gevonden, dan is de hostnaam in het
* e-mailadres bruikbaar voor mail exchange (MX). Wordt er geen
* MX-record gevonden, dan moet de hostnaam zelf zijn te vinden met
* een DNS-lookup.
*
* @link http://www.faqs.org/rfcs/rfc2821
* @link http://www.php.net/manual/en/function.getmxrr.php
* @link http://www.php.net/manual/en/function.gethostbyname.php
*/
if (getmxrr($aEmailadres[1], &$aMXhosts)) {
return true;
} else {
$sIPadres = gethostbyname($aEmailadres[1]);
if ($sIPadres == $aEmailadres[1]) {
return false;
} else {
return true;
}
}
}
Dan heb je count($aEmailadres) === 3 met drie array-elementen en keurt if (count($aEmailadres) != 2) { return false; } het e-mailadres af als ongeldig.vampirelord schreef:Wat gebeurt er als je het email adres: " hallo@ik@jij.wij " zou hebben ?
Mét dubbele aanhalingstekens is het e-mailadres wél geldig:http://en.wikipedia.org/wiki/Email_address schreef:Invalid email addresses
• Abc.example.com (an @ character must separate the local and domain parts)
• A@b@c@example.com (only one @ is allowed outside quotation marks)
[...]
Code: Selecteer alles
<form action="#" method="post">
Email:<input type="email" name="Email" required placeholder="iemand@shopaunt.com">
</form>
"google" is een valide hostname, net als bijvoorbeeld localhost.PaulG schreef:wauw weer eens wat nieuws.
Zal toch echt niet werken zonder tld.