Controle op bestaan van domein bij contactformulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Ariën  -
Beheerder

- Ariën -

23/12/2022 15:51:09
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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. ";
}

?>
Gewijzigd op 23/12/2022 15:56:00 door - Ariën -
 
PHP hulp

PHP hulp

22/12/2024 07:57:35
 
Ozzie PHP

Ozzie PHP

23/12/2022 15:54:49
Quote Anchor link
Wat returnt dit?

return $array[0]['target'];
 
- Ariën  -
Beheerder

- Ariën -

23/12/2022 16:16:20
Quote Anchor link
Ik heb het even verbeterd met een boolean als return, en een print_r.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
function ValidateDomainForMail($email) {
    list($user, $domain) = explode('@', $email);
    $array = dns_get_record($domain, DNS_MX);
    print_r($array);
    if ($array[0]['host'] == $domain && !empty($array[0]['target'])) {
        return true;
    }
else {
        return false;
    }
}

?>


Ik heb een aantal domeinen getest en geen probleem.
Maar als het goed is sluit ik hopelijk niemand buiten?
 
Ozzie PHP

Ozzie PHP

23/12/2022 16:21:29
Quote Anchor link
>> Ik heb het even verbeterd met een boolean als return

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

return ($array[0]['host'] == $domain && !empty($array[0]['target']));

?>

Hier komt altijd een true of false uit.
 
- Ariën  -
Beheerder

- Ariën -

23/12/2022 16:31:31
Quote Anchor link
Dat is veel netter. Maar het gaat mij vooral om de controle op de DNS.
 
Ozzie PHP

Ozzie PHP

23/12/2022 16:39:47
Quote Anchor link
Ik heb er geen ervaring mee, maar zie wel dat er nog meer mogelijkheden zijn:

https://www.php.net/manual/en/function.checkdnsrr.php

https://www.php.net/manual/en/function.getmxrr.php
 

24/12/2022 12:29:56
Quote Anchor link
- 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?
?>

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.
 
- Ariën  -
Beheerder

- Ariën -

24/12/2022 12:41:06
Quote Anchor link
Je zegt dat er geen standaard is om te controleren of mailadressen kloppen. Daar heb je gelijk in.
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 -
 

24/12/2022 13:10:50
Quote Anchor link
Dat is slim, om vooraf het MX-record te controleren.
Ik denk dat er veel contactformulieren zijn die dat niet hebben.
 
Ozzie PHP

Ozzie PHP

24/12/2022 20:00:42
Quote Anchor link
>> Je zegt dat er geen standaard is om te controleren of mailadressen kloppen.

filter_var('[email protected]', FILTER_VALIDATE_EMAIL)

Deze checkt of in ieder geval de syntax klopt.
 
- Ariën  -
Beheerder

- Ariën -

03/01/2023 12:03:18
Quote Anchor link
Klopt, maar ik doelde niet op de validatie. Die kende ik allang.
Het ging mij erom of de domein ervan bekend was op internet en of die mails accepteert.
 
Ivo P

Ivo P

03/01/2023 20:56:47
Quote Anchor link
- 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.

even het "bewijs" erbij gegoogled: https://superuser.com/questions/735226/how-is-email-able-to-reach-this-person-despite-no-mx-record
 
Willem vp

Willem vp

05/01/2023 22:17:00
Quote Anchor link
Ivo P op 03/01/2023 20:56:47:
- 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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.