Возможные дубликаты:
Есть ли библиотека php для проверки адресов электронной почты?
Как проверить, существует ли почтовый адрес без отправки электронной почты?
Привет, народ,
как я могу проверить адрес электронной почты для поставщика электронной почты точно так же, как yahoo?
сценарий:
asdfasdf@yahoo.com
как я могу проверить его на yahoo.com, что указанное выше электронное письмо действительно?
Заранее спасибо.
—- Правила PHP —-
Надеюсь, следующий документ поможет:
Подтвердить адрес электронной почты с помощью PHP, правильно
Единственным способом «проверки» электронной почты является попытка отправить электронное письмо на этот адрес, но чаще всего регулярное выражение будет делать трюк.
Чтобы усложнить проблему, вам может потребоваться простое подтверждение, подобное этому
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,6}$
или несколько более сложный, подобный этому
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[AZ]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b
Здесь есть довольно хорошая статья о проверке подлинности электронной почты
Вы можете отправить электронное письмо на адрес и подтвердить его пользователем, нажав на ссылку.
Сделайте SMTP-соединение с сервером и выполните поиск «Sender-Verify»:
telnet <Yahoo MX> 25 helo here.com mail from: here@there.com rcpt to: asdfasdf@yahoo.com data
Вы либо получите код для продолжения передачи, либо получите недопустимое сообщение получателя.
Найдите запись MX для этого адреса электронной почты.
Следующее регулярное выражение соответствует адресам электронной почты:
^([\w-\.]+)@((\[[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}\.)|(([\w-]+\.)+)) ([a-zA-Z]{2,4}|[0–9]{1,3})(\]?)$
rashmipandit@gmail.com – VALID
rashmi.pandit@gmail.com – VALID
rashmi_pandit@gmail.com – VALID
rashmi.pandit@gmail – INVALID
rashmi+pandit@gmail.com – INVALID
Если вы хотите более сложным в соответствии с рекомендациями RFC, вы можете использовать это:
^((([az]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([az]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$
Используйте этот бесплатный веб-сервис через SOAP-вызов, GET или POST. Все, что вам нужно сделать, это подать его на адрес электронной почты, и он вернет логическое значение, представляющее, является ли он фактическим, поставляемым адресом электронной почты:
http://www.webservicex.net/ValidateEmail.asmx?op=IsValidEmail
Там много почтовых рассылок спама / мусора (www.spam.la), которые позволяют получать письма по любому адресу. Поэтому я предлагаю не полагаться на «действительную» электронную почту в обычном смысле. Может быть, OpenID – это вариант? Для проверки «допустимого» формата вы можете использовать существующие функции, такие как filter_var () / FILTER_VALIDATE_EMAIL .
В большинстве приведенных выше ответов рассматривается проверка регулярного выражения адреса электронной почты. Чтобы убедиться, что адрес электронной почты действителен, вам необходимо подключиться к SMTP-серверу и отправить его. Все подробности и код PHP доступны здесь .
Используйте экономно, серверы Yahoo могут блокировать вас, если вы отправляете много запросов. Также рекомендуется использовать его вместе с регулярными выражениями, как описано другими.