質問: 添付ファイル付きの電子メール メッセージを想定します (JPEG 添付ファイルを想定します)。電子メール メッセージを (Tika ファサード クラスを使用せずに) 解析し、個別の部分 (a) 電子メール テキストの内容と b) 電子メールの添付ファイルを返すにはどうすればよいですか?
構成: Tika 1.2 Java 1.7
詳細: 基本的な電子メール メッセージ形式の電子メール メッセージを適切に解析できました。ただし、解析後は、a) メールのテキストの内容と、b) メールの添付ファイルの内容を知る必要があります。これらのアイテムは、基本的に親の電子メールと子の添付ファイルとしてデータベースに保存します。
私が理解できないのは、個別の部分を「取り戻す」方法と、親メールに添付ファイルがあることを知り、メールに参照されている添付ファイルを個別に保存できる方法です。これは、基本的に ZipFile コンテンツの抽出と似ていると思います。
コード例:
private Message processDocument(String fullfilepath) {
try {
File filename = new File(fullfilepath) ;
return this.processDocument(filename) ;
} catch (NullPointerException npe) {
Message error = new Message(false) ;
error.appendErrorMessage("The file name was null.") ;
return error ;
}
}
private Message processDocument(File filename) {
InputStream stream = null;
try {
stream = new FileInputStream(filename) ;
} catch (FileNotFoundException fnfe) {
// TODO Auto-generated catch block
fnfe.printStackTrace();
System.out.println("FileNotFoundException") ;
return diag ;
}
int writelimit = -1 ;
ContentHandler texthandler = new BodyContentHandler(writelimit);
this.safehandlerbodytext = new SafeContentHandler(texthandler);
this.meta = new Metadata() ;
ParseContext context = new ParseContext() ;
AutoDetectParser autodetectparser = new AutoDetectParser() ;
try {
autodetectparser.parse(
stream,
texthandler,
meta,
context) ;
this.documenttype = meta.get("Content-Type") ;
diag.setSuccessful(true);
} catch (IOException ioe) {
// if the document stream could not be read
System.out.println("TikaTextExtractorHelper IOException " + ioe.getMessage()) ;
//FIXME -- add real handling
} catch (SAXException se) {
// if the SAX events could not be processed
System.out.println("TikaTextExtractorHelper SAXException " + se.getMessage()) ;
//FIXME -- add real handling
} catch (TikaException te) {
// if the document could not be parsed
System.out.println("TikaTextExtractorHelper TikaException " + te.getMessage()) ;
System.out.println("Exception Filename = " + filename.getName()) ;
//FIXME -- add real handling
}
}