6

许多人不知道,电子邮件地址需要一个库来解析。简单的正则表达式,如@(.*),是不够的。电子邮件地址甚至可以包含评论,其中可以包含诸如@破坏简单正则表达式之类的字符。

有一个解析 RFC 2822 地址的Node.js 库

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部分,它不包括要执行的方法。

我很惊讶我找不到解决这个问题的通用库,但想必很多人都有这个问题。如何使用图书馆或不使用图书馆来解决这个问题?

4

2 回答 2

2

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

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]
于 2014-11-30T00:21:47.373 回答
0

大多数情况下,不需要将地址拆分为其组成部分,因为您对这些部分无能为力。假设您有一个有效的需求,那么有一些库可以进行比 JavaMail 更完整的验证。 这是我很快找到的一个。 我确定还有其他人。

于 2013-08-28T22:49:20.977 回答