【问题标题】:Allow user@example or user@localhost in email validation?在电子邮件验证中允许 user@example 或 user@localhost?
【发布时间】:2010-09-10 04:03:15
【问题描述】:

我正在进行电子邮件验证检查,我们需要决定是否允许将 user@localhost 和 user@example(注意没有 .anything)验证为有效的电子邮件地址。这适用于一个开源项目,该项目在整个 Web 和 Intranet 上都有许多用例。

RFC 2822(Internet 消息格式标准)允许它,但 RFC 2821(SMTP 标准)说它应该失败。

想法?

【问题讨论】:

    标签: php email web-applications


    【解决方案1】:

    这取决于您的应用程序。如果你认为你的几个用户会有一个电子邮件@localhost,你不介意。那就去吧。

    【讨论】:

      【解决方案2】:

      让它成为一个可配置的选项,这样人们就可以自己决定。我个人默认会失败,因为我还没有遇到过一个案例 - 内部网或公共互联网 - 我已经有人使用了有效的 user@localhost 类型的地址。

      【讨论】:

        【解决方案3】:

        我会禁用它。很少有组织使用内部域,而那些通常使用“acme.localhost”或“intranet.com”或其他类似名称的组织。在 DNS 中进行了某种配置以使其正常工作。

        无论如何,内部电子邮件几乎已经死了:随着即时通讯、Twitter 和 SMS 的出现,以及公司每个成员越来越多地使用外部电子邮件,您几乎完全有可能永远不会获得 TLD - 电子邮件中的无域。

        对于确实需要它的人,他们总是可以自己调整正则表达式,因为他们足够精明,可以设置自定义主机名来处理内部电子邮件。

        【讨论】:

          【解决方案4】:

          好吧,如果您在内部使用 DNS,您可以随时进行 DNS 查找。

          但如果使用 SMTP 会失败,那么我建议您确保不要包含它。

          【讨论】:

            【解决方案5】:

            我看到过 user@localhost 形式的电子邮件地址,通常是在查看邮件列表的存档时,以及从同一台机器托管和发布的管理员。所以它肯定会发生 - 我承认它打破了我的解析程序!所以现在我对电子邮件地址更加灵活了。

            【讨论】:

              【解决方案6】:

              看起来您似乎需要进行两次详细的快速检查:

              <?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)

              【讨论】:

                猜你喜欢
                • 2019-09-07
                • 1970-01-01
                • 2013-04-19
                • 2022-01-07
                • 2011-07-27
                • 2020-08-11
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多