[php] PEAR gebruiken om e-mail adressen te valideren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wilde beginnen met het schrijven van een mailinglist applicatie.
Ik dacht hiervoor PEAR te gebruiken:

Als ik eerste kwam ik natuurlijk op het valideren van e-mail adressen.
Hiervoor wilde ik http://pear.php.net/manua...c822.parseaddresslist.php
gaan gebruiken. Maar heeft iemand hier ervaring mee?!

Wat ik namelijk ook als e-mail adres in vul: alles is geldig!

Dus:

PHP:
1
2
3
4
5
6
7
8
9
10
11
require_once "PEAR.php";
require_once "Mail/RFC822.php";

$addr = 'patrick@spartarotterdam';                                                                              
                                                                            
$res= Mail_RFC822::parseAddressList($addr,'',true,true);
if (PEAR::isError($res)) die("NOT VALID: " . $res->getMessage() . "\n");
echo "OK. Data:\n";
print '<pre>';
print_r($res);
print '</pre>';


Is dus geldig! Maar dat klopt niet echt lijkt me!
Weet iemand nu hoe ik deze functie correct moet gebruiken of is deze functie gewoon knap waardeloos?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wanneer zo'n waarde geldig is, terwijl ie ongeldig moet zijn...wat drukt ie dan af? Is $res dan niet toevallig false of NULL? Ik kan het zelf niet in de documentatie terugvinden, maar ik kan me voorstellen dat die functie ook wat returnt als het fout gaat.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
OK. Data:

Array
(
    [0] => stdClass Object
        (
            [personal] => 
            [comment] => Array
                (
                )

            [mailbox] => patrick
            [host] => spartarotterdam
        )

)


Host is dus spartarotterdam, nou dat lijkt me niet correct.

Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 21:26
user@localhost is gewoon een geldig mail adres volgens de RFC.

Wat je beter kunt misbruiken om mail adressen te controleren:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * Validate an email address
 *
 * @param string    $email         Email address to validate
 * @param boolean   $domainCheck   Check if the domain exists
 */
function checkEmail($email, $domainCheck = false)
{
    if (preg_match('/^[a-zA-Z0-9\._-]+\@(\\[?)[a-zA-Z0-9\-\.]+'.
                   '\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/', $email)) {
        if ($domainCheck && function_exists('checkdnsrr')) {
            list (, $domain)  = explode('@', $email);
            if (checkdnsrr($domain, 'MX') || checkdnsrr($domain, 'A')) {
                return true;
            }
            return false;
        }
        return true;
    }
    return false;
}


Komt uit de documentatie van HTML_QuickForm, die heeft intern een soortgelijke form validation rule om mail te controleren, dit is de uitgebreidere functie die je kunt gebruiken om te kijken of een domein echt bestaat.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Waar haal je localhost vandaan!?

Er staat toch patrick@spartarotterdam en niet patrick@localhost ?!

Anywayz, die andere functie ziet er ok uit, maar ik zie al dat de domeinextensie maar 3 karakters lang kan zijn, terwijl dat tegenwoordig alweer meer is: @domein.info etc.

Voordeel van dat PEAR was, dat ik dan mn functies niet hoef te herschrijven, maar dat dat voor me gedaan wordt :) (de provider is dan nog wel voor een update verantwoordelijk trouwens, maar goed)

Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 21:26
Dan pas je de regex aan naar {1,4} ipv {1,3}, past .info er ook gewoon in.

Verder is @localhost gewoon een voorbeeld. Elk willekeurig woord die geldig is als hostname kan gebruikt worden als domein volgens de RFC. Daarbij hoort dus ook jouw domein zonder TLD extentie.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op maandag 18 april 2005 @ 11:30:
Waar haal je localhost vandaan!?

Er staat toch patrick@spartarotterdam en niet patrick@localhost ?!
De implicatie van de localhost-stelling is echter dat user@host waarbij host geen puntjes bevat gewoon geldig is, en dus is patrick@spartarotterdam ook een perfect valide mailadres op zich. Alleen wsch niet op internet ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

_JGC_ schreef op maandag 18 april 2005 @ 11:33:
Dan pas je de regex aan naar {1,4} ipv {1,3}, past .info er ook gewoon in.
.museum?

* curry684 zou 'm op {2,} zetten ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
waardeloze functie dus om e-mail adressen van een formulier te controleren!
Een e-mail adres is gewoon niet geldig als er geen domein.extensie instaan volgens mij.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op maandag 18 april 2005 @ 11:53:
waardeloze functie dus om e-mail adressen van een formulier te controleren!
Een e-mail adres is gewoon niet geldig als er geen domein.extensie instaan volgens mij.
Leuk dat je koppig bent, maar als je hier een vraag komt stellen is het wellicht handiger om te luisteren naar de mensen die vriendelijk antwoorden dat het wel geldige adressen zijn.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oh dat geloof ik ook wel hoor, maar patrick@spartarotterdam is gewoon GEEN geldig e-mail adres.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op maandag 18 april 2005 @ 12:08:
Oh dat geloof ik ook wel hoor, maar patrick@spartarotterdam is gewoon GEEN geldig e-mail adres.
Hallo, we hebben de RFC's en de voorbeelden al aangegeven waaruit helder blijkt dat het dat wel is, what more do you want? :?

De enige manier om verder te valideren is netjes het MX-record van de host op te zoeken en middels een SMTP-sessie te controleren of de betreffende exchanger de mailbox patrick kent. Maar syntactisch is het 'as valid as they come'.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • bakkerl
  • Registratie: Augustus 2001
  • Laatst online: 01-09 19:17

bakkerl

Let there be light.

curry684 schreef op maandag 18 april 2005 @ 12:16:
De enige manier om verder te valideren is netjes het MX-record van de host op te zoeken en middels een SMTP-sessie te controleren of de betreffende exchanger de mailbox patrick kent. Maar syntactisch is het 'as valid as they come'.
Een (sub)domein is niet verplicht om een MX record te hebben om mail af te laten leveren.

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Verwijderd schreef op maandag 18 april 2005 @ 12:08:
Oh dat geloof ik ook wel hoor, maar patrick@spartarotterdam is gewoon GEEN geldig e-mail adres.
Als ik de computer naast mij "spartarotterdam" als hostname geef, en ik hang er een user "patrick" in, is dat wél een geldig emailadres!

Ik denk dat je het beste toch gewoon zelf een regexp kan gebruiken in plaats van PEAR. De kans dat je die regexp moet gaan bijwerken is toch niet erg groot.

Hier vind je er wel een aantal : http://nl3.php.net/eregi
bakkerl schreef op maandag 18 april 2005 @ 12:22:
Een (sub)domein is niet verplicht om een MX record te hebben om mail af te laten leveren.
Dat is toch juist mooi? In dat geval weet je direct dat het geen geldig adres is :)

[ Voor 22% gewijzigd door eamelink op 18-04-2005 12:23 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mm, ok dan ...

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 18 april 2005 @ 12:08:
Oh dat geloof ik ook wel hoor, maar patrick@spartarotterdam is gewoon GEEN geldig e-mail adres.
Jawel, spartarotterdam is alleen geen hostname die je op het internet vindt, omdat de TLD's worden beheerd door een bepaalde instantie. En aangezien je zelf geen TLD's aan kunt maken is een adres als spartarotterdam dus niet geldig op het publieke internet. Dat wil niet zeggen dat de hostname invalid is, hij voldoet prima aan de daarvoor gestelde eisen, het is alleen dat er geen DNS entry voor bestaat. Toevallig bestaat er ook geen DNS entry voor bladieblabroodjepoep.nl. Is een emailadres met die hostname dan ook niet geldig?

En wat als jouw mailinglistapplicatie nou binnen een bedrijf moet gaan draaien? Dan kan spartarotterdam wel degelijk een host zijn die bestaat en waar je email naartoe kunt sturen. Maar ja, die mensen kunnen jouw applicatie niet draaien want jij stelt immers dat dat geen geldig adres is...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

bakkerl schreef op maandag 18 april 2005 @ 12:22:
[...]

Een (sub)domein is niet verplicht om een MX record te hebben om mail af te laten leveren.
Dat zei ik ook niet, ik zei enkel dat je een lookup moet doen. Bij een failed MX-lookup mag je de host zelf als SMTP-exchanger proberen te gebruiken :)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • samo
  • Registratie: Juni 2003
  • Laatst online: 19:52

samo

yo/wassup

Verwijderd schreef op maandag 18 april 2005 @ 12:08:
Oh dat geloof ik ook wel hoor, maar patrick@spartarotterdam is gewoon GEEN geldig e-mail adres.
Maar aan de andere kant is patrick12345@spartarotterdam.nl ook geen geldig e-mail adres volgens jouw logica. Echter, het adres is wel opgebouwd uit alle eigenschappen dat een email adres moet hebben, om door mailservers behandeld te worden. In sommige situaties kan patrick@spartarotterdam een geldig e-mailadres zijn, en om die reden accepteert PEAR het. Deze regels beslaan dus niet alleen internet, maar alle netwerken, waar PEAR ook moet kunnen werken.

Als jij wilt controleren of een e-mailadres echt bestaat zal je er toch een e-mail naartoe moeten sturen en op een een of andere manier feedback verzorgen (bijvoorbeeld door het aanklikken van een link).

Bekend van cmns.nl | ArneCoomans.nl | Het kindertehuis van mijn pa in Ghana


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
curry684 >
Jouw idee lijkt mij toch ook niet zo'n goede actie. Niet alle SMTP servers leveren direct af op de machine waar de e-mail ook moet blijven. Zo'n SMTP server weet dus ook vaak niet welke local-parts allemaal valid zijn. En misschien is de SMTP server tijdelijk down? Misschien zijn er tientallen SMTP servers?

De enige manier om een e-mailadres te verifieren is het versturen van een e-mail en wachten totdat iemand reageert op dat e-mailtje of iets uit dat e-mailtje.
Pagina: 1