2008-09-17 5 views
2

Я работаю над проверкой подлинности электронной почты, и нам нужно решить, разрешать ли пользователю @ localhost и user @ example (уведомление no .anything) быть подтвержденным как действительный адрес электронной почты. Это для проекта с открытым исходным кодом, который имеет множество вариантов использования как в Интернете в больших, так и в интрасетях.Разрешить пользователю @ example или user @ localhost в проверке подлинности электронной почты?

RFC 2822 (Стандарт формата интернет-сообщений) позволяет использовать его, но RFC 2821 (SMTP Standard) говорит, что он должен потерпеть неудачу.

Мысли?

ответ

1

Это зависит от вашего приложения. Если вы считаете, что некоторые из ваших пользователей будут иметь адрес электронной почты @localhost, и вы не против. Тогда иди за ним.

1

Сделайте его настраиваемым вариантом, чтобы люди могли сами решить. Я бы по умолчанию его к отказу, лично, поскольку я еще не столкнулся с случаем - интранет или общедоступный Интернет - где у меня был кто-то, который использовал действительный адрес пользователя @ localhost type.

0

Ну, если у вас есть DNS, работающий внутри, вы всегда можете просто выполнить поиск DNS.

Но если это произойдет с SMTP, я бы посоветовал убедиться, что вы его не включили.

0

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

0

Глядя на это, он выглядит, как вы нам нужны два быстрых проверок, как детальный:

<?php 
function valid_email($email) { 
    // First, we check that there's one @ symbol, and that the lengths are right 
    if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) { 
    // Email invalid because wrong number of characters in one section, or wrong number of @ symbols. 
    return false; 
    } 

    // take a given email address and split it into the username and domain. 
    list($userName, $mailDomain) = split("@", $email); 
    if (checkdnsrr($mailDomain, "MX")) { 
     // this is a valid email domain! 
     return true; 
    } 
    else { 
     // this email domain doesn't exist! 
     return false; 
    } 
} 
?> 

(source 1, source 2)

1

Я бы отключить его. Очень немногие организации используют внутренние домены, а те, которые обычно используют «acme.localhost» или «intranet.com» или что-то еще подобное. В DNS есть какая-то конфигурация, которую они используют, чтобы заставить ее работать.

Независимо от того, что внутренняя электронная почта почти мертва: с появлением мгновенных сообщений, Twitter и SMS вместе с увеличением доступности внешней электронной почты для каждого члена компании почти вполне вероятно, что вы никогда не получите Домен без доменов в электронном письме.

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