Как проверить, является ли адрес электронной почты действительным или действительным с использованием PHP
Можно ли проверить, существует ли электронная почта, похожая на этот сайт?
<?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?
7 ответов
Вы должны проверить с SMTP.
Это означает, что вы должны подключиться к SMTP-серверу этой электронной почты.
После подключения к SMTP-серверу вы должны отправить следующие команды:
HELO somehostname.com
MAIL FROM: <no-reply@gmail.com>
RCPT TO: <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
}
Поскольку люди продолжают понижать это, вот несколько замечаний, которые вы можете рассмотреть, если вы обязаны и решили проверить электронную почту:
Спамеры тоже делают трюк с подключением, поэтому не думайте, что все серверы будут отвечать одинаково Один из других ответов ссылается на эту библиотеку, которая имеет эту оговорку
Некоторые почтовые серверы будут молча отклонять тестовое сообщение, чтобы спаммеры не проверяли электронные письма своих пользователей и не фильтровали действительные электронные письма, поэтому эта функция может работать некорректно со всеми почтовыми серверами.
Так что, если есть неверный адрес, вы можете не получить неверный адрес ответа. В самом верхнем ответе ответ не упоминается.
Списки спама. Да, вы можете попасть в черный список, пытаясь это сделать (помните, я говорил, что спамеры тоже знают эти приемы). Они заносятся в черный список по IP-адресу, и если ваш сервер постоянно выполняет проверку соединений, вы рискуете оказаться в Spamhaus или другом черном списке. Если вы попали в черный список, что толку от проверки адреса электронной почты?
Если действительно важно проверить адрес электронной почты, то принятым способом является принуждение пользователя ответить на электронное письмо. Отправьте им полный адрес электронной почты со ссылкой, которую они должны нажать, чтобы подтвердить. Это не спам, и вы все еще можете проверить, действительно ли это.
Я искал тот же самый ответ все утро и в значительной степени обнаружил, что, вероятно, невозможно проверить, действительно ли каждый адрес электронной почты, который вам когда-либо нужно проверить, существует в то время, когда вам нужно его проверить. Так что, как обойти, я вроде создал простой 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;
}
}
}
}
?>
Я наткнулся на 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
Прежде всего вам нужно проверить запись MX для этого адреса электронной почты. Когда вы закончите, вам нужно проверить SMTP. Я следовал ниже упомянутой статье и скрипт работает как шарм:
http://www.phpwala.in/php/how-to-check-if-an-email-address-is-real-or-not-php/2018/01
По состоянию на 2023 год не должно быть надежного технического способа проверить существование почтовых адресов. Если бы это было так, это было бы отличным способом для спамеров рассылать еще больше спама, потому что они могли бы легко сканировать действительные электронные письма.
Единственный способ — отправить письмо с подтверждением. При этом проверяется не только существование адреса, но и его правильность для данного пользователя. Не поможет, если адрес существует, но принадлежит кому-то другому. В некоторых странах, например в Европе, это даже требуется по закону.
Вы должны проверить, есть ли в письме запись MX. Компонент фильтра Zend-Framwork имеет методы для проверки электронной почты по MX-записи.