我有一个这样的电子邮件文本文件:
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做)。
答案 0 :(得分:3)
阅读本文,以便您按照RFC兼容的方式进行:
答案 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命令验证电子邮件地址是否有效,但垃圾邮件发送者滥用了该权限,我们都失败了。
现在,我建议采用三部分方法:
验证语法有效性。您可以使用Mail perl module中的怪物正则表达式进行检查,以确保电子邮件地址格式正确。然后确保将localhost域/ ips列入黑名单作为检查的一部分。
验证域名是否有效。对域进行DNS验证检查。您可以更进一步使用STMP检查并确保可以连接到域的有效邮件服务器。但是,由于虚拟主机方案,可能会出现一些误报结果。
发送实际的电子邮件,但包含一个链接到服务器上脚本的图像。当使用图像读取电子邮件时,将通知您的服务器图像已下载,因此电子邮件仍然有效且有效。但是,由于这个原因,现在很多电子邮件客户端默认不加载图像,因此不会100%有效。
答案 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";
}
}
}
您只需要安装模块即可。它的主页是:
答案 4 :(得分:0)