Как проверить, действительно ли адрес электронной почты действителен или действителен с помощью 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?

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

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

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

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

 HELO somehostname.com MAIL FROM: <no-reply@gmail.com> RCPT TO: <emailtovalidate@domain.com> 

Если вы получите «<emailtovalidate@domain.com>: отказ в доступе к реестру», это означает, что это сообщение недействительно.

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

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

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

 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. Спамеры тоже используют трюк подключения, поэтому не предполагайте, что все серверы будут реагировать одинаково. Один из других ответов ссылается на эту библиотеку, которая имеет это оговорку

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

Поэтому, если есть недопустимый адрес, вы можете не получить неверный адресный ответ. В приведенном выше ответе не упоминается об этом.

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

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

Я встретил EmailPie

https://github.com/bryanhelmig/emailpie , для которого требуется эта установка:

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

 git clone git@github.com:bryanhelmig/emailpie.git cd emailpie mkvirtualenv emailpie pip install -r requirements python rundev.py Visit http://localhost:5000/v1/check?email=test@gmail.com 

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

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; } } } } ?> 

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