Является ли email @ домен действительным адресом электронной почты? - PullRequest
2 голосов
/ 14 сентября 2010

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

Что делает ваша библиотека проверки электронной почты или метод домашней выпечки, и разрешаете ли вы такие вещи?

Ответы [ 4 ]

2 голосов
/ 15 марта 2011

Домен .io в настоящее время имеет запись ресурса MX, поэтому да, она действительна.Это явно разрешено RFC 5321.

Вы можете использовать мою бесплатную функцию PHP is_email() для проверки адресов.Скачать можно здесь .Попробуйте проверить http://isemail.info/jblue@io онлайн, например.

Это обеспечит полное соответствие адреса RFC 5321.При желании он также может проверить, существует ли домен на самом деле и имеет ли запись MX.

Вы не должны полагаться на средство проверки, которое сообщит вам, действительно ли существует адрес электронной почты пользователя: некоторые интернет-провайдеры выдают несоответствующие адресаих пользователи, особенно в странах, которые не используют латинский алфавит.Больше в моем эссе о проверке электронной почты здесь: http://isemail.info/about.

2 голосов
/ 14 сентября 2010

Ну, это зависит от того, что приложение должно делать.

Будет ли оно использоваться во внутренней сети? Если это так, email@domain может быть в порядке.

Если нет, вы можете явно указать fqdn, чтобы они не могли отправлять почту внутри вашего домена (foo@localhost и т. Д.).

Проверка доменной части не должна быть трудной:

$domain = array_pop(explode('@', $email));

Затем, в зависимости от ваших потребностей, проверьте домен.

Вы можете проверить его на допустимый синтаксис (это fqdn). В Интернете есть множество учебных пособий (которые предоставляют многие платформы), которые могут проверить домен в строке, чтобы определить, является ли он форматом fqdn ...

Или, если ваши потребности выше, вы можете просто проверить, что ваш сервер может решить их (например, dns_get_record() ...

if (false === dns_get_record($domain, DNS_MX)) {
    //invalid domain (can't find an MX record)...
}

(Обратите внимание, я сказал, что может сделать это, если вы не должны . Это будет зависеть от вашего конкретного случая использования) ...

1 голос
/ 15 марта 2011

проверка с false не лучший способ, возвращаемое значение может быть пустым массивом, например $ domain = '-onlinbe.de';

вместо этого используйте empty (): http://us3.php.net/manual/en/function.empty.php

$ dnsMx = dns_get_record ($ domain, DNS_MX); $ dnsA = dns_get_record ($ domain, DNS_A);

if (empty($dnsMx) && empty($dnsA)) { 
  echo 'domain not available';
}

или используйте

if(gethostbyname($domain) === $domain) {
  echo 'no ip found';
}
1 голос
/ 14 сентября 2010

В этой статье приведено регулярное выражение для сопоставления всех действительных адресов электронной почты :

Вы можете настроить его на

  • Отменить IP-домены
  • Сбросить номера портов

А чтобы ответить на вопрос об электронной почте @ domain, вы можете также от него отказаться, если вы не ожидаете электронных писем в интрасети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...