解析Java中的RFC 2822电子邮件地址 [英] Parse RFC 2822 email addresses in Java
问题描述
由于许多人不知道,电子邮件地址需要一个库来解析.像@(.*)
这样的简单正则表达式是不够的.电子邮件地址甚至可以包含注释,其中可以包含诸如@
之类的字符,破坏简单的正则表达式.
As many people are unaware, email addresses require a library to parse. Simple regexes, like @(.*)
, are not sufficient. Email addresses can even contain comments, which can contain characters like @
, breaking simple regexes.
有一个 Node.js库,用于解析RFC 2822地址:
There is a Node.js library that parses RFC 2822 addresses:
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
的几乎直接端口.
which is an almost direct port of the perl module Mail::Address
.
我希望这是Java的 InternetAddress
类,但是除了完整的地址(包括例如: user@gmail.com
.但是我正在尝试提取gmail.com
部分,该部分不包含要执行的方法.
This is something that I would expect to exist in Java's InternetAddress
class, but it doesn't break things down any further than the full address, which can include e.g. user@gmail.com
. But I'm trying to extract the gmail.com
part, which it doesn't include a method to do.
很奇怪,我找不到解决这个问题的通用库,但是大概很多人都遇到了这个问题.怎么用图书馆解决这个问题?
I'm surprised I can't find a common library that solves this, but presumably many people have this problem. How can this be solved using a library or no?
推荐答案
如果您只需要从电子邮件地址获取域部分(请注意邮件组,因为它们没有@),您可以这样做:
If you need to just get domain part from email address (be aware of mailing groups since they do not have @) you can do like this:
int index = "user@domain.com".lastIndexOf("@");
String domain = "user@domain.com".substring(index+1);
我在这里使用了lastIndexOf,因为RFC2822电子邮件地址可能包含多个@符号(如果已转义的话). 如果要跳过邮件组,则InternetAddress类isGroup()中有一个方法
I used lastIndexOf here since by RFC2822 email address might contain more than one @ symbols (if it is escaped). If you want to skip mailing groups there is method in InternetAddress class isGroup()
PS也可能是该地址包含路由信息:
PS also it could be that address contains routing information:
@donald.mit.edu,@mail.mit.edu:peter@hotmail.com
或地址文字:
peter@[192.168.134.1]
这篇关于解析Java中的RFC 2822电子邮件地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!