我有一个这样的电子邮件文本文件:
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 来做)。
我有一个这样的电子邮件文本文件:
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 来做)。
阅读此内容,以便您以符合 RFC 的方式进行操作:
验证电子邮件的最简单方法可能是向其发送消息。正如 Sean 指出的那样,这可能会让您对 DoS 攻击持开放态度,但从您的描述来看,您似乎拥有的是文本文件而不是网页,因此这应该不是问题。
正则表达式不是匹配电子邮件的好工具,有很多有效地址天真匹配会失败。查看此使用正则表达式验证电子邮件的尝试比较以了解详细信息。
如果您必须离线检查它们,我会将电子邮件分成几部分(即@ 之前和@ 之后的部分),然后您可以创建自定义验证器(或正则表达式)来验证这些部分。
首先,我会阅读这篇文章I Know How To Validate An Email Address until I Read The RFC。
回到过去,您只需连接到用户的邮件服务器并使用 VRFY 命令并验证电子邮件地址是否有效,但垃圾邮件发送者滥用了该权限,我们都输了。
现在,我建议采用三部分方法:
验证句法有效性。您可以使用Mail perl 模块中的怪物正则表达式来检查以确保电子邮件地址格式正确。然后确保将 localhost 域/ips 列入黑名单作为检查的一部分。
验证域是否处于活动状态。对域进行 DNS 验证检查。您可以更进一步,使用 STMP 检查并确保您可以连接到域的有效邮件服务器。但是,由于虚拟主机方案,可能会出现一些假阴性结果。
发送一封实际的电子邮件,但包含一个链接到服务器上脚本的单个图像。当电子邮件与图像一起被读取时,您的服务器将收到图像已下载的通知,因此电子邮件是有效的。但是,现在许多电子邮件客户端出于这个原因默认不加载图像,因此它不会 100% 有效。
我编写了一个简单的 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";
}
}
}
您只需要安装模块。它的主页是: