首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Java中的MIME发送器(RFC 822)

解析Java中的MIME发送器(RFC 822)
EN

Stack Overflow用户
提问于 2013-05-28 02:55:43
回答 1查看 879关注 0票数 2

MIME邮件发件人以如下格式显示:

代码语言:javascript
复制
"John Doe" <johndoe@gmail.com>
<johndoe@gmail.com>

我试图弄清楚如何在上面的示例中提取字符串"johndoe“,尽管我还需要”johndoe“和"johndoe@gmail.com”部分(根据gmail.com,我非常确定在@上拆分就是这里需要的全部内容)。显然,对我自己的解析器进行正则表达式是一个(不是很好的)选择。

使用javax.mail.internet.MimeMessage似乎可以做到这一点。所有的构造函数都需要一个我没有的Folder (嗯,我有点需要,它存在于IMAP层中),例如

代码语言:javascript
复制
MimeMessage(Folder folder, InputStream is, int msgnum) 

这让我觉得我用错了这个类。尽管如此,如果我以这种方式解析,我确实可以访问返回Address数组的getFrom()方法,该方法本身并不向我提供使用方法。

使用mime4j很容易做到这一点:

代码语言:javascript
复制
case T_FIELD: // field means header
    if(token.getName() == "from") {
        // get raw string as above - unparsed

所以使用mime4j或者使用java,javax等工具应该可以从那里提取地址的"a@b.com“部分,但是我还没有在javax或mime4j中找到一个负责这一点的类。

EN

回答 1

Stack Overflow用户

发布于 2013-05-28 03:05:34

我认为您需要来自javax.mail的InternetAddress类:http://docs.oracle.com/javaee/6/api/javax/mail/internet/InternetAddress.html#getAddress()

最小工作示例:

代码语言:javascript
复制
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;

public class JavaMailExample {

    public static void main(String[] args) throws AddressException {
        String fullemail = "\"John Doe\" <johndoe@gmail.com>";
        InternetAddress addr = new InternetAddress(fullemail);
        System.out.println(addr.getPersonal()); // John Doe
        System.out.println(addr.getAddress());  // johndoe@gmail.com
   }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16778988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档