web-dev-qa-db-ja.com

Java電子メールメッセージパーサー?

以下の電子メールのフィールド(日付、件名、差出人、宛先)の解析に役立つJavaライブラリを知っている人はいますか?

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


some message
29
Kareem

JavaMail は、javax.mailパッケージでメールサービスおよびメール関連サービス(従来のメッセージやMIMEメッセージの解析など)を提供するOracleライブラリです。さらに、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);

ヘッダーの解析は次のように行うことができます

message.getAllHeaderLines();
for (Enumeration<Header> e = message.getAllHeaders(); e.hasMoreElements();) {
    Header h = e.nextElement();
    h.getName();
    h.getValue();
}
33
Jherico

JavaMailで問題が発生しました(必要な電子メールメッセージを解析できません)。

Mime4J を使用すると、はるかに良い結果が得られます。

9
Adam Gent

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();
5
Ashish Sharma