解析Java中的RFC 2822电子邮件地址 [英] Parse RFC 2822 email addresses in Java

查看:297
本文介绍了解析Java中的RFC 2822电子邮件地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆