Controle op bestaan van domein bij contactformulier
Is dit nog een beetje van de tijd, of moet ik met andere dingen rekening houden?
Of heeft dit weinig zin meer omdat ik bepaalde legit domeinen uitsluit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
function ValidateDomainForMail($email){
list($user, $domain) = explode('@', $email);
$array = dns_get_record($domain,DNS_MX);
if($array[0]['host']==$domain&&!empty($array[0]['target'])){
return $array[0]['target'];
}
}
$mail= '[email protected]';
if(ValidateDomainForMail($mail)) {
echo "Het domein accepteert e-mails.";
}
else {
echo "Het domein accepteert geen mail. ";
}
?>
function ValidateDomainForMail($email){
list($user, $domain) = explode('@', $email);
$array = dns_get_record($domain,DNS_MX);
if($array[0]['host']==$domain&&!empty($array[0]['target'])){
return $array[0]['target'];
}
}
$mail= '[email protected]';
if(ValidateDomainForMail($mail)) {
echo "Het domein accepteert e-mails.";
}
else {
echo "Het domein accepteert geen mail. ";
}
?>
Gewijzigd op 23/12/2022 15:56:00 door - Ariën -
return $array[0]['target'];
Code (php)
Ik heb een aantal domeinen getest en geen probleem.
Maar als het goed is sluit ik hopelijk niemand buiten?
Dat lijkt me inderdaad al logischer :)
$array[0]['host'] == $domain
Kan de host überhaupt iets anders opleveren dan het ingevoerde domein via dns_get_record?
Ik zou via : bool aangeven dat er een boolean wordt gereturned.
Die else in de if-constructie kun je weglaten.
Beter nog, alles op 1 regel:
Hier komt altijd een true of false uit.
Dat is veel netter. Maar het gaat mij vooral om de controle op de DNS.
https://www.php.net/manual/en/function.checkdnsrr.php
https://www.php.net/manual/en/function.getmxrr.php
- Ariën - op 23/12/2022 15:51:09:
Deze functie heb ik gemaakt, en de bedoeling is dat ik hiermee controleer of er een bestaand domein in een mailadres gebruikt wordt in mijn contactformulier. Dus iets als bladieblaargh.nl zal geweigerd moeten worden.
Is dit nog een beetje van de tijd, of moet ik met andere dingen rekening houden?
Of heeft dit weinig zin meer omdat ik bepaalde legit domeinen uitsluit?
?>
Is dit nog een beetje van de tijd, of moet ik met andere dingen rekening houden?
Of heeft dit weinig zin meer omdat ik bepaalde legit domeinen uitsluit?
?>
Hangt er van af of domeinen checken echt is wat je wilt.
Omdat het in combinatie met een e-mailveld is wil je waarschijnlijk eerder het mailadres valideren. Maar dat kan niet, omdat er geen enkele wereldwijd gebruikte standaard bestaat voor mailadressen. De enige manier om een e-mailadres te valideren is door een mail te sturen naar dat adres, en een antwoord te verwachten vanaf dat mailadres.
Vanuit dat oogpunt kan je van te voren een paar logische checks bedenken op de domeinnaam. Bijvoorbeeld een geldige TLD, die kan je met de lijst van TLD's filteren. Pas dan zou ik checken op DNS record en pas daarna mailen, om het verkeer te beperken.
Maar als een domein geen MX-record heeft, dan kan ik je er toch vanuit gaan dat mailen altijd zinloos is?
Ik snap wel dat niet 100% kan controleren of een alias zoals [email protected] wel zou bestaan en [email protected] weer niet. De enige oplossing is een bouncemail afwachten, maar dat is niet altijd zo op domeinen. Sommige hebben (hopelijk bewust) een catch-all draaien.
Maar het gaat mij om de domein. Zodat iets als ikbestaechtniet.nl geweigerd wordt als deze niet bestaat of een MX-record heeft.
Gewijzigd op 24/12/2022 12:41:36 door - Ariën -
Ik denk dat er veel contactformulieren zijn die dat niet hebben.
filter_var('[email protected]', FILTER_VALIDATE_EMAIL)
Deze checkt of in ieder geval de syntax klopt.
Het ging mij erom of de domein ervan bekend was op internet en of die mails accepteert.
- Ariën - op 24/12/2022 12:41:06:
Maar als een domein geen MX-record heeft, dan kan ik je er toch vanuit gaan dat mailen altijd zinloos is?
Maar als een domein geen MX-record heeft, dan kan ik je er toch vanuit gaan dat mailen altijd zinloos is?
Als er geen MX record is, gaat de mail naar het A adres.
even het "bewijs" erbij gegoogled: https://superuser.com/questions/735226/how-is-email-able-to-reach-this-person-despite-no-mx-record
Ivo P op 03/01/2023 20:56:47:
Als er geen MX record is, gaat de mail naar het A adres.
- Ariën - op 24/12/2022 12:41:06:
Maar als een domein geen MX-record heeft, dan kan ik je er toch vanuit gaan dat mailen altijd zinloos is?
Als er geen MX record is, gaat de mail naar het A adres.
En als er wél een MX-record is zegt dat ook nog niet alles, want het kan een NULL MX-record zijn; als hostname is dan een '.' ingevuld. Zie ook https://www.rfc-editor.org/rfc/rfc7505