Hoe kan ik een return code van de functie MAIL() opvangen, zodat ik een gebruiker kan vertellen wat er precies misgaat? Bijvoorbeeld, dat e-mail adres niet geldig is, of niet bestaat, of dat provider offline is, of e-mail adrespost volgeraakt is, etc.
mail() geeft alleen true of false terug, dit is dus niet mogelijk.
Je zal functies moeten maken die het adres testen voordat je het verstuurd. Verder zal je mail() zo moeten gaan gebruiken:

<?php
if(!mail('ontvanger','onderwerp','bericht','headers')) {
echo "fout";
} else {
echo "goed";
}
?>

Edit:
Een een hoop andere dingen die je wilt zijn wel mogelijk met PHP, maar dan moet je veel scripten. Bijvoorbeeld kijken of provider online is, dat doe je met een ping of een fsockopen of zo.

Elwin
Is er dan geen andere manier bij een andere functie? Er zou toch een manier zijn om bijvoorbeeld een boodschap 'Het genoemde e-mail adres bestaat niet', 'De provider is op dit moment down', enz. te kunnen weergeven, niet waar?
Dat vroeg je niet :-P

Deze heb ik ergens bij een email script gepost:

<?php
function email_validator($email) {
$email_host = explode("@", $email);
$email_host = $email_host[1];
$email_resolved = gethostbyname($email_host);

if($email_resolved == $email_host) {
return( FALSE );
}

if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email)) {
return( TRUE );
}

return( FALSE );
}

if ( !email_validator( "[email protected]" ) ) {
echo "Ongeldig e-mail adres.";
}
else {
echo "Geldig e-mail adres.";
}
?>
Wat fijn voor zo'n oplossing, maar het is wel voor een geldig e-mail adres! Graag ook een procedure om te kijken, of een provider wel online is, of niet, enz.
dat is deze ;) hij check of het email adres goed is opgemaakt, en of de provider van het email adres online is (let op het gethostbyname() gedeelte ;) )
Wat ik toch wel als een betrouwbare functie beschouw om een e-mailadres te controleren is deze:

<?php
function check_email_mx($email) {
// Checks e-mailadress

if((preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/',$email)) || (preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$email))) {
$host = explode('@', $email);
if(checkdnsrr($host[1].'.', 'MX') ) return true;
if(checkdnsrr($host[1].'.', 'A') ) return true;
if(checkdnsrr($host[1].'.', 'CNAME') ) return true;
}
return false;
}
?>

Die kijkt in de DNS-records of er een MX, een A of een CNAME record is. Dan weet je iig of het domein bestaat.

Waar je nooit achter kan komen is opf de gebruiker @domein bestaat, want daarvoor moet je op de server @domein kijken. En geloof me, er zullen niet veel beheerders zijn die je daar toestemming voor geven.

Verder is het imo niet intressant om te weten of een host online is. Het mail-protocol is zo ontworpen dat berichten niet ineens verdwenen zijn als de host down is. Deze blijven dan netjes wachten totdat ze weer verder kunnen. Het bericht wordt dan niet direct afgeleverd, maar het komt wel aan.

Maar goed, als je persé wilt weten of een host online is zal je contact met de host moeten maken (zie mijn vorige post).

Elwin
Pim Vernooij schreef op 21.03.2006 09:57
<Pim Vernooij>
Heee... jij moet op school zitten! ;)

Elwin
ik zit op school, in de les nog wel :-P
tutut , wel opletten he :)

@jan , providers online zijn? zo werkt dat niet. als je provider of de mailserver geen solaas geeft komt de mail 99% van de keer in een fallback server terecht, die checked of er al reactie komt en dan verstuurd hij alsnog de mail. Vanuit php is dit niet mogelijk bij mij weet. Misschien met timeouts proberen oid, maar daar begin ik niet aan :)

Reageren