用Java解析RFC 2822电子邮件地址

时间:2013-08-28 20:57:07

标签: java email javamail email-address rfc2822

许多人都不知道,电子邮件地址需要一个库来解析。简单的正则表达式,如@(.*),是不够的。电子邮件地址甚至可以包含注释,其中可以包含@等字符,从而打破简单的正则表达式。

Node.js library解析RFC 2822地址:

var address = addresses[0];
console.log("Email address: " + address.address);
console.log("Email name: " + address.name());
console.log("Reformatted: " + address.format());
console.log("User part: " + address.user());
console.log("Host part: " + address.host());

这是perl模块Mail::Address的几乎直接端口。

这是我期望在Java的InternetAddress类中存在的东西,但它不会破坏完整地址,包括例如完整地址。 user@gmail.com。但我正在尝试提取gmail.com部分,它不包含要执行的方法。

我很惊讶我找不到解决这个问题的公共图书馆,但可能很多人都有这个问题。如何使用库解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您需要从电子邮件地址获取域名部分(因为他们没有@,请注意邮件组),您可以这样做:

int index = "user@domain.com".lastIndexOf("@");
String domain = "user@domain.com".substring(index+1);

我在这里使用了lastIndexOf,因为RFC2822电子邮件地址可能包含多个@符号(如果它被转义)。 如果要跳过邮件组,则InternetAddress类isGroup()

中有方法

PS也可能是该地址包含路由信息:

@donald.mit.edu,@mail.mit.edu:peter@hotmail.com

或解决文字:

peter@[192.168.134.1]

答案 1 :(得分:0)

大多数情况下,没有必要将地址拆分为其组成部分,因为您无法对部件进行任何操作。假设您有一个有效的需求,那里有一些库可以比JavaMail做更完整的验证。 Here's one I found quickly.我确定还有其他人。