Het forum voor de webwinkel eigenaar en bezoeker van webwinkels.

 
vampirelord
Berichten: 981
Lid geworden op: 12 oktober 2011
Contacteer:

PHP script

09 april 2013

Heeft iemand een php script om fake email adressen te filteren uit een nieuwsbrief csv bestand. Het bestand heeft slechts 1 kolom ' Het emailaders ' .
 
pietpatat
Berichten: 85
Lid geworden op: 06 oktober 2012

Re: PHP script

09 april 2013

Heeft iemand een php script om fake email adressen te filteren uit een nieuwsbrief csv bestand. Het bestand heeft slechts 1 kolom ' Het emailaders ' .
Zoiets?
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; 
} 
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: PHP script

09 april 2013

Bijna goed, alleen zou ik getmxrr() toevoegen voor een controle op records voor Mail eXchange (MX).
 
vampirelord
Berichten: 981
Lid geworden op: 12 oktober 2011
Contacteer:

Re: PHP script

09 april 2013

Dank voor jullie snelle antwoord!
Advertentie

Met Shopify maak je zelf je eigen webwinkel dankzij meer dan honderd thema’s en de complete appstore. Shopify sluit ook goed aan op dropshippers. De software is technisch volledig SEO-geoptimaliseerd en biedt alle sociale media-integraties. Meer info op Shopify.com.

 
Banaan
Berichten: 136
Lid geworden op: 29 januari 2011

Re: PHP script

09 april 2013

Bijna goed, alleen zou ik getmxrr() toevoegen voor een controle op records voor Mail eXchange (MX).
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.

Wist dat zelf ook niet, maar toen een klant klaagde dat zijn adres werd afgekeurd, en ik hem wel gewoon kon mailen op dat adres, bleek het dus een vaag ingestelde DNS te zijn. Ik dacht dat het niet mocht, maar het is dus wel toegestaan.
Zelf hebben we ons script hierop niet aangepast omdat het weinig voorkomt, maar je moet er dus wel op bedacht zijn dat je ooit eens onterecht een e-mailadres als ongeldig bestempelt.
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: PHP script

10 april 2013

Dat wist ik; daarom schreef ik toevoegen 8)
 
Banaan
Berichten: 136
Lid geworden op: 29 januari 2011

Re: PHP script

10 april 2013

    eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-
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.
 
vampirelord
Berichten: 981
Lid geworden op: 12 oktober 2011
Contacteer:

Re: PHP script

10 april 2013

Had gisternacht ook een heel artikel gelezen dat de volgende email adressen ook correct zijn :

test@test@test.test

Test%test@test.test

Test\test@test.test

maar ja als je dat in je email adres gebruikt, dan vraag je om problemen :P
 
Banaan
Berichten: 136
Lid geworden op: 29 januari 2011

Re: PHP script

10 april 2013

Ik denk dat gebruikers niet om problemen vragen. Meer de providers die het toestaan. Bij hotmail/live zie je het nog weleens. Als Jan@live.com bezet is, dan nemen ze maar jan_@live.com. Denk niet dat de gebruiker zich dan bewust is van de problemen die dat kan geven.
Ben ook al eens een ' tegengekomen in een e-mailadres van een werknemer bij een grote telecomprovider. d'ancona@domain.tld zeg maar.... alles direct op tilt :lol:
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: PHP script

11 april 2013

In het PHP Kookboek leg ik onder andere de werking van de volgende functie uit. In het commentaar vinden jullie de belangrijkste aandachtspunten.
<?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;
        }
    }
}
 
vampirelord
Berichten: 981
Lid geworden op: 12 oktober 2011
Contacteer:

Re: PHP script

11 april 2013

/**
* 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;
}


Wat gebeurd er als je het email adres: " hallo@ik@jij.wij " zou hebben ?
 
Gebruikersavatar
Ward
Berichten: 5343
Lid geworden op: 18 december 2010
Locatie: Eindhoven
Contacteer:

Re: PHP script

11 april 2013

Wat gebeurt er als je het email adres: " hallo@ik@jij.wij " zou hebben ?
Dan heb je count($aEmailadres) === 3 met drie array-elementen en keurt if (count($aEmailadres) != 2) { return false; } het e-mailadres af als ongeldig.

Het apenstaartje scheidt het lokale adres en het domein en mag daarom maar één keer worden gebruikt. Vereenvoudigd gezegd: je weet niet of de post moet worden bezorgd in het postvak hallo op postkantoor ik@jij.wij of het postvak hallo@ik op postkantoor jij.wij.
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)
[...]
Mét dubbele aanhalingstekens is het e-mailadres wél geldig:

"hallo@ik"@jij.wij

Alleen heb je dan zo'n hoogst ongebruikelijk e-mailadres dat ik het persoonlijk nog steeds zou afkeuren. Dat is dus een keuze.
 
ximonn
Berichten: 2
Lid geworden op: 17 mei 2013
Contacteer:

Re: PHP script

17 mei 2013

Wat ook helpt is om de autofill zo goed mogelijk te triggeren.
Dan wordt een eerder gebruikt (gevalideerd?!) email adres ingevuld door de browser.
De klant is sneller klaar met invullen van het check-out formulier, wat in principe tot hogere conversie leidt.
<form action="#" method="post">
   Email:<input type="email" name="Email" required placeholder="iemand@shopaunt.com">
 </form>
Het html5 input type="email" wordt door oudere browsers ge-interpreteerd als "text".

https://www.shopaunt.com/subpage/email_input_test.html
of kort:
http://tinyurl.com/astxpmd

Getest op: Chrome, Firefox en Safari.

Als bonus krijg je op een mobiel apparaat dan meteen het juiste toetsenbordje (met de '@' erin).
 
m19
Berichten: 48
Lid geworden op: 18 april 2013

Re: PHP script

17 mei 2013

Officieel gezien is een tld niet verplicht voor een email :)

henk@google is net zo geldig als henk@google.com

Al zal het in dit geval niets uitmaken.
 
PaulG
Berichten: 1676
Lid geworden op: 31 maart 2011

Re: PHP script

17 mei 2013

wauw weer eens wat nieuws.
Zal toch echt niet werken zonder tld.
 
m19
Berichten: 48
Lid geworden op: 18 april 2013

Re: PHP script

17 mei 2013

wauw weer eens wat nieuws.
Zal toch echt niet werken zonder tld.
"google" is een valide hostname, net als bijvoorbeeld localhost.
Daarom is henk@localhost geldig, net als henk@google

Maar goed, maakt allemaal niet uit :roll: