Toon posts:

[PHP] email validation dillema.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben nu bezig een email validator te maken, maar ik heb een dillema. Adressen zoals naam@host.com werken inmiddels goed, maar ik nu het volgende probleem.

Stel iemand heeft een mail adress zoals hoi@bbc.co.uk, dan werkt het niet (invalid mail adress dus). Op zich geen probleem, ik kan het zo maken dat zo'n mail adress wel werkt, maar dan kan je ook hoi@host.com.nu doen (en dat wil ik dus niet).

Iemand die enige hints/tips/meningen hierover heeft? (en voordat men utfs schreeuwt, ik heb al gezoch maar kan zo snel niet een thread vinden over dit specifieke probleem).

Verwijderd

Stel iemand heeft een mail adress zoals hoi@bbc.co.uk, dan werkt het niet (invalid mail adress dus). Op zich geen probleem, ik kan het zo maken dat zo'n mail adress wel werkt, maar dan kan je ook hoi@host.com.nu doen (en dat wil ik dus niet).
Verklaar je nader. Ik begrijp je niet helemaal.
Ik zie niet in wat bbc.co.uk te maken heeft met .com.nu.

Verwijderd

Topicstarter
Op maandag 17 september 2001 13:56 schreef daniel_hoenderdos het volgende:

[..]

Verklaar je nader. Ik begrijp je niet helemaal.
Ik zie niet in wat bbc.co.uk te maken heeft met .com.nu.
Verklaring:

user@bbc.co.uk (als voorbeeld) is valid (dus die moet wel door de validation heenkomen), maar user@host.com.nu is niet valid, dus die moet een error geven. Als ik het aanpas dat een format van user@bbc.co.uk wel geldig is, dan zou user@host.com.nu ook geldig zijn, maar dat is het dus niet.

Ik zit me dus af te vragen hoe ik te werk moet gaan om zoiets op te lossen.

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-09 16:14
Post je script eens hier.

Volgens jouw beschrijving denk ik dat bijvoorbeeld user@host.kom werkt. Of heb ik het fout?

Waarop controleer jij trouwens?

Verwijderd

Je kan natuurlijk, als je perse zeker wilt zijn dat het
betreffende domein achter het @tje bestaat, 'm openen, dan
gaat het zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
 $E_Mail = "ikke@domein.nl";

   If (StrPos($E_Mail, "@")) {
      $Mail = Explode("@", $E_Mail);
      $Adres = @FOpen($Mail[1], "r");

      If ($Adres) Echo "Domein bestaat!";
      Else Echo "Domein bestaat niet!";

      FClose($Adres);
   }
   Else Echo "Geen domein opgegeven!";
?>

HTH. Zoniet, dan lees ik het hier wel weer :)

Verwijderd

Topicstarter
Mjah het is tot zo ver vrij simpel (eerste stapjes in de leuke wereld der ereg functies), maar .kom kan dus helaas ook. Tot zover kijkt ie alleen of het mail adress user@host.com is (.com mag dan tot zo ver uit 2 of 3 letters bestaan, dat beslaat denk ik wel alle normale extensies)

Bedankt voor dat stukje Kyori, maar ik las ergens dat als je daadwerkelijk gaat checken of het domein bestaat dat het dan best wel langzaam kan gaan worden (ik weet niet of dat klopt, maar zo ja, dan doe ik het liever niet)

Verwijderd

Op maandag 17 september 2001 14:09 schreef Gio het volgende:

...

Bedankt voor dat stukje Kyori, maar ik las ergens dat als je daadwerkelijk gaat checken of het domein bestaat dat het dan best wel langzaam kan gaan worden (ik weet niet of dat klopt, maar zo ja, dan doe ik het liever niet)
Dat klopt inderdaad. Je kan ook een lijst maken met alle
bestaande domein extensies (zie icann.org of zoek op Google)
en deze in een textbestandje plaatsen, vervolgens gooi je
met File() alles in een array en kijk je of de betreffende
extensie achter de domeinnaam hangt. Een andere manier zal
er misschien ook wel zijn, maar deze lijkt me in jouw geval
de meest geschikte.

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-09 16:14
Op maandag 17 september 2001 14:09 schreef Gio het volgende:
Mjah het is tot zo ver vrij simpel (eerste stapjes in de leuke wereld der ereg functies), maar .kom kan dus helaas ook. Tot zover kijkt ie alleen of het mail adress user@host.com is (.com mag dan tot zo ver uit 2 of 3 letters bestaan, dat beslaat denk ik wel alle normale extensies)

Bedankt voor dat stukje Kyori, maar ik las ergens dat als je daadwerkelijk gaat checken of het domein bestaat dat het dan best wel langzaam kan gaan worden (ik weet niet of dat klopt, maar zo ja, dan doe ik het liever niet)
Maar toch is dat de enige manier om te controleren of een adres geldig is. Als je alleen checkt op .com, .net of .org dan loop je nog tegen fouten aan. Dit adres bestaat ook niet: blaisgeba.com om maar iets te noemen...

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

en sinds kort (of binnenkort) komt ook .info (en nog een hoop andere) uit.

dus ook extensies met 4 of 5 tekens moeten 'valid' zijn.

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Verwijderd

Kheb net het betreffende scriptje toch maar ff getest, en
het gaat toch wel supersnel, advies: wel gebruiken dus.

Test zelf: http://www.dxch.net/mail.php?emailadres@domein.com

Dat je alles achter 't '?' moet vervangen door een geldig
emailadres lijkt me voor zich spreken, maar ik meldt het
voor de zekerheid toch nog :)

Script (anders dan de eerste die ik poste. Die werkte namelijk niet):
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
 $E_Mail = "ikke@domein.nl";
   If (StrPos($E_Mail, "@")) {
      $Mail = Explode("@", $E_Mail);
      $Adres = @FOpen("http://$Mail[1]", "r");

      If ($Adres) Echo "Domein bestaat!";
      Else Echo "Domein bestaat niet!";
   }
   Else Echo "Geen domein opgegeven!";
?>

Success!

Verwijderd

Topicstarter
als ik user@bbc.co.uk doe op dat scriptje dan bestaat dat domein niet ;)

Maar iig bedankt, ik ga er eens mee rondwerken, zien waar ik kom

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-09 16:14
Op maandag 17 september 2001 14:22 schreef Kyori het volgende:
http://www.dxch.net/mail.php?emailadres@domein.com
Vraagje: hoe doe je dat met ?variable ?? Ik moet altijd ?t=variable doen...

Verwijderd

Op maandag 17 september 2001 14:27 schreef FlamerX het volgende:

[..]

Vraagje: hoe doe je dat met ?variable ?? Ik moet altijd ?t=variable doen...
Haha, zonder twijfel één van de best bewaarde geheimen van de pro's (8>

Maargoed, ik ben lulligste niet, dus ik vertel het gewoon:
Als je direct achter 't '?' iets plaatst wordt dit in de
interne var. $QUERY_STRING geplaatst. Veel plezier ermee :)

  • Arnim
  • Registratie: Juni 2001
  • Laatst online: 22-09 16:18
Je zult echter nog een probleem krijgen met deze functie.

Probeer maar eens: emailadres@hetnet.nl

Deze, en ook andere domeinnamen, geven geen antwoord en dat zorgt ervoor dat je script heeeeeel lang gaat duren. De user zal dan nogmaals op submit gaan drukken. Ellende dus. Kwam ik na een aantal dagen vloeken achter...

Als iemand hier een oplossing voor heeft, hoor ik het ook graag. :)

Team ColdFusion


  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-09 16:14
Op maandag 17 september 2001 14:30 schreef Kyori het volgende:

[..]

Haha, zonder twijfel één van de best bewaarde geheimen van de pro's (8>

Maargoed, ik ben lulligste niet, dus ik vertel het gewoon:
Als je direct achter 't '?' iets plaatst wordt dit in de
interne var. $QUERY_STRING geplaatst. Veel plezier ermee :)
Kijk, daar was ik dus nooit opgekomen, thnx!!
Weet ik veel dat het een predefined var is. Wel stom eigenlijk, van mezelf |:(

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 15-09 16:14
Op maandag 17 september 2001 14:33 schreef Arnim het volgende:
Je zult echter nog een probleem krijgen met deze functie.

Probeer maar eens: emailadres@hetnet.nl

Deze, en ook andere domeinnamen, geven geen antwoord en dat zorgt ervoor dat je script heeeeeel lang gaat duren. De user zal dan nogmaals op submit gaan drukken. Ellende dus. Kwam ik na een aantal dagen vloeken achter...

Als iemand hier een oplossing voor heeft, hoor ik het ook graag. :)
submit knop uitschakelen (weet ff niet meer hoe da moet, javascript)

  • intert0y
  • Registratie: Februari 2000
  • Laatst online: 19-09 11:19
gewoon wachtwoord laten sturen naar e-mailadres dan vullen ze altijd een werkend e-mailadres in.

Okay is geen antwoord op je vraag maar wel een oplossing.

ik ben geen postbode, maar postman Pat rulez!


Verwijderd

Topicstarter
Op maandag 17 september 2001 14:34 schreef intert0y het volgende:
gewoon wachtwoord laten sturen naar e-mailadres dan vullen ze altijd een werkend e-mailadres in.

Okay is geen antwoord op je vraag maar wel een oplossing.
Das ook wel een manier ja (iig een stuk simpeler) :)

Verwijderd

Overigens dat scriptje van Kyori werkt alleen als er een webserver draait op een adres wat gelijk is aan het deel achter de @ in een mailadres. Dat hoeft lang niet altijd zo te zijn.

De mijns inziens meest betrouwbare manier om programmatisch te checken of een email adres bestaat is:
1) haal het domeinnaam op (het gedeeltje achter de @)
2) zoek het MX record voor die domeinnaam
3) maak een connectie naar de SMTP server
4) simuleer met SMTP commando's het sturen van een mailtje totaan het aangeven van een bestemmings adres, en controleer of dat geaccepteerd wordt
5) verbreek de verbinding met de mail server

Overigens zijn heir ook nog loopholes in te vinden, bijv:
a) mailserver is gecrashed, geen tweede MX record, dus fout, hoewel mailadres op zich wel goed is
b) mailserver is gecrashed, tweede MX record gedefinieerd, adres wordt daar wel geaccepteerd, maar de gebruiker bestaat niet op de gecrashte mailserver

De enige manier om betrouwbaar zoiets te checken is door gewoon een validatie mailtje te sturen naar dat adres. Als het bounced, of als de gebruiker niet met de verstuurde validatiecode inlogd de eerste keer, is het email adres bogus.

HTH :)

Verwijderd

Op maandag 17 september 2001 14:34 schreef FlamerX het volgende:

[..]

submit knop uitschakelen (weet ff niet meer hoe da moet, javascript)
code:
1
2
3
<script>
   document.Formnaam.Knopnaam.disabled = true
</script>

Hopla :)
Pagina: 1