Подтвердить что ты не робот

Как проверить, действительно ли адрес электронной почты действителен или действителен с помощью PHP

Можно ли проверить, существует ли электронная почта, похожая на этот сайт?

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>

Это то, что я имею прямо сейчас. Проверяет, существует ли домен, но он не может проверить, пользовательский адрес электронной почты существует в этом домене. Можно ли это сделать с помощью PHP?

4b9b3361

Ответ 1

Вы должны проверить с SMTP.

Это означает, что вы должны подключиться к этому почтовому SMTP-серверу.

После подключения к SMTP-серверу вы должны отправить следующие команды:

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

Если вы получили "<[email protected]> Relay access denied", это значит, что это письмо недействительно.

Существует простой класс PHP. Вы можете использовать это:

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

Ответ 2

Вы не можете проверить, существует ли электронная почта на самом деле, не отправив письмо на эту учетную запись. Но вы можете проверить это по крайней мере отформатирован как один

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

Вы можете добавить еще одну проверку, если хотите. Разобрать домен и затем запустить checkdnsrr

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

Так как люди продолжают понижать это, вот некоторые заметки, которые вы можете рассмотреть, если вы обязаны и решили проверить электронную почту:

  1. Спамеры тоже делают трюк с подключением, поэтому не думайте, что все серверы будут реагировать одинаково. Один из других ответов ссылается на эту библиотеку, которая имеет эту оговорку

    Некоторые почтовые серверы будут молча отклонять тестовое сообщение, чтобы спаммеры не проверяли электронные письма своих пользователей и не фильтровали действительные электронные письма, поэтому эта функция может работать некорректно со всеми почтовыми серверами.

    Так что, если есть неправильный адрес, вы можете не получить неправильный адрес ответа. В самом верхнем ответе ответ не упоминается.

  2. Списки спама. Да, вы можете попасть в черный список, пытаясь это сделать (помните, я говорил, что спамеры тоже знают эти приемы). Они заносятся в черный список по IP-адресу, и если ваш сервер постоянно выполняет проверку соединений, вы рискуете оказаться в Spamhaus или другом черном списке. Если вы попали в черный список, что толку от проверки адреса электронной почты?

  3. Если действительно важно проверить адрес электронной почты, то принятым способом является принуждение пользователя ответить на электронное письмо. Отправьте им полный адрес электронной почты со ссылкой, которую они должны нажать, чтобы подтвердить. Это не спам, и вы все еще можете проверить, действительно ли это.

Ответ 3

Я все время искал этот же ответ и довольно много узнал, что, вероятно, невозможно проверить, действительно ли каждый адрес электронной почты, который вам когда-либо нужно проверять, существует в то время, когда вам нужно его проверить. Таким образом, я создал простой PHP script, чтобы убедиться, что адрес электронной почты отформатирован правильно, а также проверяет правильность используемого имени домена.

GitHub здесь 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;
        }
    }
    }
}
?>

Ответ 4

Я наткнулся на EmailPie

https://github.com/apilayer/emailpie, который требует этой установки:

Убедитесь, что Redis установлен и работает на стандартных портах!

git clone [email protected]:bryanhelmig/emailpie.git
cd emailpie
mkvirtualenv emailpie
pip install -r requirements
python rundev.py
Visit http://localhost:5000/v1/[email protected]

Ответ 5

Вы должны проверить, имеет ли электронная почта запись MX. Компонент фильтра Zend-Framwork имеет методы проверки электронной почты по записи MX.