Java Email message Parser?

Kar*_*eem 29 java email parsing email-parsing

是否有人熟悉Java库,可以帮助解析下面的电子邮件的字段(日期,主题,从,到)?

Message-ID: <19815303.1075861029555.JavaMail.ss@kk>
Date: Wed, 6 Mar 2010 12:32:20 -0800 (PST)
From: someone@someotherplace.com
To: someone@someplace.com
Subject: some subject
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-From: one, some <some.one@someotherplace.com>
X-To: one
X-cc: 
X-bcc: 
X-Folder: Bob\Inbox
X-Origin: Bob-R
X-FileName: rbob (Non-Privileged).pst


some message
Run Code Online (Sandbox Code Playgroud)

Jhe*_*ico 33

JavaMail是一个oracle库,它在javax.mail包中提供邮件服务和邮件相关服务(如解析传统和MIME消息).此外,Apache还有一个用于邮件处理的Commons Email库.

在JavaMail api中,解析包含电子邮件消息的字符串的简单方法(可能是或可能不是显式MIME)如下所示

String content = ...
Session s = Session.getInstance(new Properties());
InputStream is = new ByteArrayInputStream(content.getBytes());
MimeMessage message = new MimeMessage(s, is);
Run Code Online (Sandbox Code Playgroud)

解析标题可以像这样完成

message.getAllHeaderLines();
for (Enumeration<Header> e = message.getAllHeaders(); e.hasMoreElements();) {
    Header h = e.nextElement();
    h.getName();
    h.getValue();
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*ent 9

我遇到了JavaMail的问题(它无法解析它应该的一些电子邮件消息).

我用Mime4J得到了更好的结果.


Ash*_*rma 5

我建议您使用email-mime-parser,

以下示例代码为您提供了所需的所有相关信息:

ContentHandler contentHandler = new CustomContentHandler();

MimeConfig mime4jParserConfig = new MimeConfig();
BodyDescriptorBuilder bodyDescriptorBuilder = new DefaultBodyDescriptorBuilder();
MimeStreamParser mime4jParser = new MimeStreamParser(mime4jParserConfig,DecodeMonitor.SILENT,bodyDescriptorBuilder);
mime4jParser.setContentDecoding(true);
mime4jParser.setContentHandler(contentHandler);

InputStream mailIn = 'Provide email mime stream here';
mime4jParser.parse(mailIn);

Email email = ((CustomContentHandler) contentHandler).getEmail();

List<Attachment> attachments =  email.getAttachments();

Attachment calendar = email.getCalendarBody();
Attachment htmlBody = email.getHTMLEmailBody();
Attachment plainText = email.getPlainTextEmailBody();

String to = email.getToEmailHeaderValue();
String cc = email.getCCEmailHeaderValue();
String from = email.getFromEmailHeaderValue();
Run Code Online (Sandbox Code Playgroud)