it-swarm.com.de

So überprüfen Sie, ob eine E-Mail-Adresse echt oder gültig ist: PHP

Kann ich überprüfen, ob eine ähnliche E-Mail wie auf dieser Website vorhanden ist?

http://verify-email.org/

<?php
    if($_POST['email'] != ''){
        // The email to validate
        $email = $_POST['email'];

        // An optional sender
        function domain_exists($email, $record = 'MX'){
            list($user, $domain) = explode('@', $email);
            return checkdnsrr($domain, $record);
        }
        if(domain_exists($email)) {
            echo('This MX records exists; I will accept this email as valid.');
        }
        else {
            echo('No MX record exists;  Invalid email.');
        }
    }
?>
<form method="POST">
    <input type="text" name="email">
    <input type="submit" value="submit">
</form>

Das habe ich gerade. Überprüft, ob die Domain existiert , kann aber nicht prüfen, ob die E-Mail des Benutzers in dieser Domain existiert. Ist das mit PHP möglich?

46
telexper

Sie sollten mit SMTP überprüfen.

Das bedeutet, dass Sie eine Verbindung zum SMTP-Server dieser E-Mail herstellen müssen.

Nach dem Herstellen einer Verbindung zum SMTP-Server sollten Sie die folgenden Befehle senden:

HELO somehostname.com
MAIL FROM: <[email protected]>
RCPT TO: <[email protected]>

Wenn Sie "<[email protected]> Relay-Zugriff verweigert" erhalten, bedeutet dies, dass diese E-Mail ungültig ist.

Es gibt eine einfache PHP Klasse. Sie können es benutzen:

http://www.phpclasses.org/package/6650-PHP-Check-if-an-e-mail-is-valid-using-SMTP.html

39
Mohsen Alizadeh

Sie können nicht überprüfen, ob eine E-Mail tatsächlich vorhanden ist, ohne eine E-Mail an dieses Konto zu senden. Sie können jedoch überprüfen, ob es mindestens so formatiert ist

if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    //Email is valid
}

Sie können einen weiteren Scheck hinzufügen, wenn Sie möchten. Analysieren Sie die Domain und führen Sie checkdnsrr aus

if(checkdnsrr($domain)) {
     // Domain at least has an MX record, necessary to receive email
}

Da die Leute dies immer wieder ablehnen, sollten Sie folgende Hinweise beachten, wenn Sie zur Validierung von E-Mails verpflichtet und entschlossen sind:

  1. Auch Spammer machen den Verbindungstrick, nehmen also nicht an, dass alle Server gleich reagieren. Eine der anderen Antworten verweist auf diese Bibliothek , die diese Einschränkung aufweist

    Einige Mailserver lehnen die Testnachricht stillschweigend ab, um zu verhindern, dass Spammer die E-Mails ihrer Benutzer prüfen und die gültigen E-Mails filtern. Daher funktioniert diese Funktion möglicherweise nicht bei allen Mailservern ordnungsgemäß.

    Wenn es also eine ungültige Adresse gibt, erhalten Sie möglicherweise keine ungültige Adressantwort. Die am besten bewertete Antwort erwähnt dies nicht.

  2. Spam-Listen. Ja, Sie können dafür auf die schwarze Liste gesetzt werden (denken Sie daran, dass Spammer diese Tricks auch kennen). Sie werden nach IP-Adresse gesperrt. Wenn Ihr Server ständig Überprüfungsverbindungen herstellt, besteht die Gefahr, dass Sie sich bei Spamhaus oder einer anderen Sperrliste einschleichen. Was nützt es Ihnen, die E-Mail-Adresse zu bestätigen, wenn Sie auf die schwarze Liste gesetzt werden?

  3. Wenn es wirklich so wichtig ist, eine E-Mail-Adresse zu bestätigen, muss der Benutzer auf akzeptierte Weise gezwungen werden, auf eine E-Mail zu antworten. Senden Sie ihnen eine vollständige E-Mail mit einem Link, auf den sie klicken müssen, um bestätigt zu werden. Es ist kein Spam, und Sie müssen immer noch überprüfen, ob es gültig ist.

35
Machavity

Ich habe den ganzen Morgen nach der gleichen Antwort gesucht und festgestellt, dass es wahrscheinlich unmöglich ist, zu überprüfen, ob jede zu überprüfende E-Mail-Adresse zum Zeitpunkt der Bestätigung tatsächlich vorhanden ist. Um dies zu umgehen, habe ich ein einfaches PHP Skript erstellt, um zu überprüfen, ob die E-Mail-Adresse korrekt formatiert ist und auch, ob der verwendete Domain-Name korrekt ist.

GitHub hier https://github.com/DukeOfMarshall/PHP---JSON-Email-Verification/tree/master

<?php

# What to do if the class is being called directly and not being included in a script     via PHP
# This allows the class/script to be called via other methods like JavaScript

if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])){
$return_array = array();

if($_GET['address_to_verify'] == '' || !isset($_GET['address_to_verify'])){
    $return_array['error']              = 1;
    $return_array['message']            = 'No email address was submitted for verification';
    $return_array['domain_verified']    = 0;
    $return_array['format_verified']    = 0;
}else{
    $verify = new EmailVerify();

    if($verify->verify_formatting($_GET['address_to_verify'])){
        $return_array['format_verified']    = 1;

        if($verify->verify_domain($_GET['address_to_verify'])){
            $return_array['error']              = 0;
            $return_array['domain_verified']    = 1;
            $return_array['message']            = 'Formatting and domain have been verified';
        }else{
            $return_array['error']              = 1;
            $return_array['domain_verified']    = 0;
            $return_array['message']            = 'Formatting was verified, but verification of the domain has failed';
        }
    }else{
        $return_array['error']              = 1;
        $return_array['domain_verified']    = 0;
        $return_array['format_verified']    = 0;
        $return_array['message']            = 'Email was not formatted correctly';
    }
}

echo json_encode($return_array);

exit();
}

class EmailVerify {
public function __construct(){

}

public function verify_domain($address_to_verify){
    // an optional sender  
    $record = 'MX';
    list($user, $domain) = explode('@', $address_to_verify);
    return checkdnsrr($domain, $record);
}

public function verify_formatting($address_to_verify){
    if(strstr($address_to_verify, "@") == FALSE){
        return false;
    }else{
        list($user, $domain) = explode('@', $address_to_verify);

        if(strstr($domain, '.') == FALSE){
            return false;
        }else{
            return true;
        }
    }
    }
}
?>