Как проверить email на существование php
Пример #1 Валидация e-mail адреса, используя функцию filter_var()
$email_a = ‘joe@example.com’ ;
$email_b = ‘bogus’ ;
?php
if ( filter_var ( $email_a , FILTER_VALIDATE_EMAIL )) echo «E-mail адрес ‘ $email_a ‘ указан верно.\n» ;
>
if ( filter_var ( $email_b , FILTER_VALIDATE_EMAIL )) echo «E-mail адрес ‘ $email_b ‘ указан верно.\n» ;
> else echo «E-mail адрес ‘ $email_b ‘ указан неверно.\n» ;
>
?>
Результат выполнения данного примера:
E-mail адрес 'joe@example.com' указан верно. E-mail адрес 'bogus' указан неверно.
Пример #2 Валидация IP-адреса, используя функцию filter_var()
if ( filter_var ( $ip_a , FILTER_VALIDATE_IP )) echo «IP-адрес ‘ $ip_a ‘ указан верно.» ;
>
if ( filter_var ( $ip_b , FILTER_VALIDATE_IP )) echo «IP-адрес ‘ $ip_b ‘ указан верно.» ;
>
?>
Результат выполнения данного примера:
Адрес '127.0.0.1' указан верно.
Пример #3 Дополнительные параметры функции filter_var()
$int_a = ‘1’ ;
$int_b = ‘-1’ ;
$int_c = ‘4’ ;
$options = array(
‘options’ => array(
‘min_range’ => 0 ,
‘max_range’ => 3 ,
)
);
if ( filter_var ( $int_a , FILTER_VALIDATE_INT , $options ) !== FALSE ) echo «Число A ‘ $int_a ‘ является верным (от 0 до 3).\n» ;
>
if ( filter_var ( $int_b , FILTER_VALIDATE_INT , $options ) !== FALSE ) echo «Число B ‘ $int_b ‘ является верным (от 0 до 3).\n» ;
>
if ( filter_var ( $int_c , FILTER_VALIDATE_INT , $options ) !== FALSE ) echo «Число C ‘ $int_c ‘ является верным (от 0 до 3).\n» ;
>
?php
$options [ ‘options’ ][ ‘default’ ] = 1 ;
if (( $int_c = filter_var ( $int_c , FILTER_VALIDATE_INT , $options )) !== FALSE ) echo «Число C ‘ $int_c ‘ является верным (от 0 и 3).» ;
>
?>
Результат выполнения данного примера:
Число A '1' является верным (от 0 до 3). Число C '1' является верным (от 0 до 3).
Проверка E-Mail
Класс осуществляет проверку адреса электронной почты по трем параметрам:
- При помощи регулярных выражений.
- Производит проверку домена из белого списка.
- Делает тестовый запрос на сервер.
Данный пример отключен из-за использования спамерами. Воспользуйтесь сервисом проверки e-mail.
/* * This script was writed by Setec Astronomy - setec@freemail.it * * This script is distributed under the GPL License * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * http://www.gnu.org/licenses/gpl.txt * */ define ('DEBUG_OK', true); class CCheckMail < var $timeout = 10; var $domain_rules = array ("aol.com", "bigfoot.com", "brain.net.pk", "breathemail.net", "compuserve.com", "dialnet.co.uk", "glocksoft.com", "home.com", "msn.com", "rocketmail.com", "uu.net", "yahoo.com", "yahoo.de"); function _is_valid_email ($email = "") < return preg_match('/^[.\w-]+@([\w-]+\.)+[a-zA-Z]$/', $email); > function _check_domain_rules ($domain = "") < return in_array (strtolower ($domain), $this->domain_rules); > function execute ($email = "")< if (!$this->_is_valid_email ($email)) return false; $host = substr (strstr ($email, '@'), 1); if ($this->_check_domain_rules ($host)) return false; $host .= "."; if (getmxrr ($host, $mxhosts[0], $mxhosts[1]) == true) array_multisort ($mxhosts[1], $mxhosts[0]); else < $mxhosts[0] = $host; $mxhosts[1] = 10; >if (DEBUG_OK) print_r ($mxhosts); $port = 25; $localhost = $_SERVER['HTTP_HOST']; $sender = 'info@' . $localhost; $result = false; $id = 0; while (!$result && $id < count ($mxhosts[0])) < if (function_exists ("fsockopen")) < if (DEBUG_OK) print_r ($id . " " . $mxhosts[0][$id]); if ($connection = fsockopen ($mxhosts[0][$id], $port, $errno, $error, $this->timeout)) < fputs ($connection,"HELO $localhost\r\n"); // 250 $data = fgets ($connection,1024); $response = substr ($data,0,1); if (DEBUG_OK) print_r ($data); if ($response == '2') // 200, 250 etc. < fputs ($connection,"MAIL FROM:\r\n"); $data = fgets($connection,1024); $response = substr ($data,0,1); if (DEBUG_OK) print_r ($data); if ($response == '2') // 200, 250 etc. < fputs ($connection,"RCPT TO:\r\n"); $data = fgets($connection,1024); $response = substr ($data,0,1); if (DEBUG_OK) print_r ($data); if ($response == '2') // 200, 250 etc. < fputs ($connection,"data\r\n"); $data = fgets($connection,1024); $response = substr ($data,0,1); if (DEBUG_OK) print_r ($data); if ($response == '2') // 200, 250 etc. < $result = true; >> > > fputs ($connection,"QUIT\r\n"); fclose ($connection); if ($result) return true; > > else break; $id++; > //while return false; > >
Пример использования:
$str='vasya@mail.ru' $alter=new CCheckMail(); print "E-mail: ".$str." - ".($alter->execute($str)?'существует':'не существует');
- Сервис и API проверки e-mail.
- Другой пример проверки e-mail.
- Универсальная рассылка почты на PHP,
- Вставка изображения в письмо на PHP,
- Отправка почты по шаблону на PHP,
- Удалить все сообщения из почтового ящика.
- Настройки SPF и DKIM чтобы письма не попадали в спам.
- email рассылка по шаблону на PHP
Проверка правильности email на PHP
Проверка правильного формата вводимых данных очень важна в любых информационных системах. В данной статье, мы рассмотрим возможности PHP проверить, корректно ли указан адрес электронной почты (email). Обращу внимание, что речь идет лишь о проверке корректной структуры адреса. Дело в том, что адрес, может либо быть корректным (т.е. валидным), но при этом не существовать. Например, пользователь может просто ошибиться символом при вводе. Поэтому задача данной статьи – отсеять заведомо некорректные значения для email.
Как известно email состоит из двух основных частей. Например, адрес: MyEmail@myssite.ru.
Здесь, MyEmail – это непосредственный адрес (или логин) пользователя, а myssite.ru – адрес сайта, которому соответствует электронная почта.
Следовательно, проверка адреса на валидность заключается в том, что он должен соответствовать структуре:
логин_пользователя@доменное_имя.доменная_зона
В итоге, задача сводилась к построению регулярного выражения для проверки, соответствует ли проверяемая стока допустимым символам и структуре email. Но, начиная с PHP 5.2, появилась возможность выполнить эту проверку встроенной функцией filter_var(). Пример такой проверки:
$email = "MyEmail@mysite.ru";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) echo "Адрес указан корректно.";
>else echo "Адрес указан не правильно.";
>
В первый параметр функции указывается строковое значение, которое нужно проверить. Второй параметр – это идентификатор применяемого фильтра (в данном случае для проверки email). Функция filter_var() универсальна и может быть использована для проверки различных значений – числовое значение, логическое или проверка валидности IP-адреса.
Валидация email с использованием регулярного выражения PHP
Если же либо версия PHP не позволяет вам применить описанный выше метод, либо хотите просто действовать по старинке, то можно использовать регулярные выражения:
$email = "MyEmail@mysite.ru";
if (preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9_.-]+(?:\.?[a-z0-9]+)?\.[a-z])$/i", $email)) echo "Адрес указан корректно.";
>else echo "Адрес указан не правильно.";
>
Если используете подобное регулярное выражение, стоит быть внимательным к возможным адресам. Например, в данный код решит, что введенное значение не email, если доменная зона будет более 5 символов или если адрес будет задан кириллицей. Поэтому, применяя его, учитывайте возможные вводимые значения.
Как проверить существование email перед отправкой письма?
Как с помощью PHP или через что то что можно прикрутить к php прочекать email на существование перед отправкой? Многие вводят левые email и они выходят в ошибку при отправке. Боюсь не понравится это sendpulse.com уже более 10% ошибки.
- Вопрос задан более трёх лет назад
- 4589 просмотров
1 комментарий
Оценить 1 комментарий
modesden @modesden Автор вопроса
Всем спасибо!
Решения вопроса 0
Ответы на вопрос 5

Web Developer
Думаю что всё же первое самое письмо на подтверждение ящика должно уйти вслепую. Ну а дальше уже рассылать только тем кто подтвердился через ссылку из письма.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Сергей Софьичев @thisishappi
Верстальщик=)
$email = $_GET['email']; if (!(filter_var($email, FILTER_VALIDATE_EMAIL))) die('Неверно указан E-mail');
разве не то что нужно?
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
я таких нагенерить могу сколько угодно, а почтовый сервис забанит за спам.

Наиболее надёжный способ проверить существование e-mail это сделать callout через инициацию SMTP-сессии. Достаточно будет получить 250 OK на команду RCPT TO с проверяемым адресом.
Но он не даёт 100% гарантии, поскольку некоторые серверы всегда говорят OK на любой адрес в поддерживаемых им доменах.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Внимание! Изменился адрес почты!
До тех пор, пока в основе лежит SMTP, указывать можно будет все что угодно. Да, можно отправить проверочное письмо. А с той стороны стоит greylisting, который запросит повторную отправку или вообще злобный самописный скрипт, который вот также делает встречную проверку — а существует ли адрес с которого пришло письмо? Это старая проблема rambler — письма на rambler.ru могут попасть через несколько часов (!) после отправки. Даже синтаксис проверить и то сложно — синтаксис адреса отправителя подразумевает безумное количество вариаций.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Для многих почтовых серверов аналогично.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- PHP
- +2 ещё
Как вывести полное описание товара в категории Woocommerce?
- 1 подписчик
- 9 часов назад
- 17 просмотров