检查格式良好的邮箱地址

时间:2009-07-25 14:59:14

标签: validation email email-validation well-formed

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

10:info@example.com;dev@example.com
12:john@host.com; "George <g.top@host.com>" 
43:jim.p@web.com.;sue-allen@web.com
...

我想检查列表是否包含格式正确的条目。您是否知道要检查的任何工具或网络服务并向我提供无效地址列表?

更新亲爱的,感谢您的投入。我真的在寻找一个基本的语法检查,所以我会留在Rafe's idea(我会用Java做)。

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:3)

电子邮件验证并不像正则表达式那样简单

首先,我会阅读这篇文章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%有效。

  4. 资源

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

答案 3 :(得分: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

答案 4 :(得分:0)

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

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