1

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

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 的想法(我会用 Java 来做)。

4

5 回答 5

3

阅读此内容,以便您以符合 RFC 的方式进行操作:

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

于 2009-07-25T15:02:46.453 回答
3

验证电子邮件的最简单方法可能是向其发送消息。正如 Sean 指出的那样,这可能会让您对 DoS 攻击持开放态度,但从您的描述来看,您似乎拥有的是文本文件而不是网页,因此这应该不是问题。

正则表达式不是匹配电子邮件的好工具,有很多有效地址天真匹配会失败。查看此使用正则表达式验证电子邮件的尝试比较以了解详细信息。

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

于 2009-07-25T15:18:38.250 回答
3

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

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

回到过去,您只需连接到用户的邮件服务器并使用 VRFY 命令并验证电子邮件地址是否有效,但垃圾邮件发送者滥用了该权限,我们都输了。

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

  1. 验证句法有效性。您可以使用Mail perl 模块中的怪物正则表达式来检查以确保电子邮件地址格式正确。然后确保将 localhost 域/ips 列入黑名单作为检查的一部分。

  2. 验证域是否处于活动状态。对域进行 DNS 验证检查。您可以更进一步,使用 STMP 检查并确保您可以连接到域的有效邮件服务器。但是,由于虚拟主机方案,可能会出现一些假阴性结果。

  3. 发送一封实际的电子邮件,但包含一个链接到服务器上脚本的单个图像。当电子邮件与图像一起被读取时,您的服务器将收到图像已下载的通知,因此电子邮件是有效的。但是,现在许多电子邮件客户端出于这个原因默认不加载图像,因此它不会 100% 有效。

资源

  1. 在 ASP 中验证电子邮件地址(在线)
  2. 在 PHP 中验证电子邮件地址(代码示例)
  3. 这个商业产品做批量电子邮件验证←这可能是你要找的
  4. SO问题:如何在不发送电子邮件的情况下检查电子邮件地址是否存在
于 2009-07-25T15:45:34.827 回答
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

于 2009-07-25T15:48:46.443 回答
0

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

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

于 2009-07-25T17:57:37.197 回答