检查格式良好的邮箱地址

问题描述 投票:1回答:5

我有一个这样的电子邮件文本文件:

10:[email protected];[email protected]
12:[email protected]; "George <[email protected]>" 
43:[email protected].;[email protected]
...

我想检查列表是否包含格式良好的条目。你知道要检查的任何工具或网络服务,并给我一个无效地址列表吗?

更新亲爱的,谢谢您的意见。我真的在寻找基本的语法检查,所以我将继续使用Rafe's idea(我会用Java做)。

validation email email-validation well-formed
5个回答
2
投票

我写了一个简单的Perl脚本,它使用Email :: Address模块​​来验证这些地址:

#!/usr/bin/env perl

use Email::Address;

while (<>) {
    chomp;
    @addresses = split /\;/;

    foreach my $address (@addresses) {
        if (!Email::Address->parse($address)) {
            print $address, "\n";
        }
    }
}

您只需安装模块即可。它的主页是:

http://emailproject.perl.org/wiki/Email::Address


3
投票

阅读本文,以便您按照RFC兼容的方式进行:

http://www.eph.co.uk/resources/email-address-length-faq/


3
投票

验证电子邮件的最简单方法可能是向其发送消息。正如Sean所指出的,这可以让你对DoS攻击开放,但是根据你的描述,你似乎有一个文本文件而不是一个网页,所以这应该不是问题。

正则表达式不是匹配电子邮件的好工具,有很多有效的地址,天真匹配将失败。查看attempts to validate emails with regex的比较了解详情。

如果你必须离线检查它们,我会将电子邮件分成几部分(即@之前和@之后的部分),然后你可以创建一个自定义验证器(或正则表达式)来验证这些部分。


3
投票

Email validation is not as simple as a regular expression

首先,我会读这篇文章I Knew How To Validate An Email Address Until I Read The RFC

在以前的日子里,您可以连接到用户的邮件服务器并使用VRFY命令并验证电子邮件地址是否有效,但垃圾邮件发送者滥用了该权限,我们都失败了。

现在,我建议采用三部分方法:

  1. 验证语法有效性。您可以使用Mail perl module中的怪物正则表达式来检查以确保电子邮件地址格式正确。然后确保将localhost域/ ips列入黑名单作为检查的一部分。
  2. 验证域是否有效。对域进行DNS验证检查。您可以更进一步使用STMP检查并确保可以连接到域的有效邮件服务器。但是,由于虚拟主机方案,可能会出现一些误报结果。
  3. 发送实际的电子邮件,但包含链接到服务器上的脚本的单个图像。当使用图像读取电子邮件时,将通知您的服务器图像已下载,因此电子邮件仍然有效且有效。但是,现在许多电子邮件客户端由于这个原因默认不加载图像,因此它不会100%有效。

Resources

  1. Validating Email Addresses in ASP(在线)
  2. Validating Email Addresses in PHP(代码示例)
  3. This commercial product does bulk email verification←这可能就是你要找的东西
  4. 所以问题:How to check if an email address exists without sending an-email

0
投票

这个问题比它看起来更难。面对它时,我从mf.c源代码中的NMH模块中窃取了代码。然后我将地址解析器导入Lua,以便我可以处理脚本中的电子邮件地址。

使用其他人的代码为我节省了一个痛苦的世界。

© www.soinside.com 2019 - 2024. All rights reserved.