本文介紹了如何以編程方式將Lotus Notes電子郵件文檔轉換為MIME格式的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我開始開發一個復雜的解決方案,然后發現DxlExporter
將為您完成所有工作。我想分享這個簡單的解決方案。
推薦答案
通過convertToMIME()
將文檔轉換為MIME
后,使用DxlExporter
完成其余工作。它創建包含<mime>
標記的XML輸出,完全轉換的MIME格式文檔的輸出駐留在該標記中。此代碼不執行完整的XML解析。它只是獲取<mime> </mime>
標記之間的所有內容。我已經用這個代碼成功地轉換了數以萬計的電子郵件文檔,只有幾次失敗-所有這些文檔都來自格式不佳的外部電子郵件文檔。我100%成功地處理了源自Notes的電子郵件文檔。
import lotus.domino.Document;
import lotus.domino.DxlExporter;
import lotus.domino.NotesException;
import lotus.domino.Session;
public class DocToMimeConverter
{
private static final int MIMEOPTION_DXL = 0;
private static final String tagStart = "<mime><![CDATA[";
private static final String tagEnd = "]]></mime>";
private DxlExporter exporter = null;
public DocToMimeConverter(Session session) throws NotesException
{
super();
exporter = session.createDxlExporter();
}
public String convert(Document doc) throws NotesException
{
String mimeDoc = null;
exporter.setMIMEOption(MIMEOPTION_DXL);
doc.removeItem("$KeepPrivate");
doc.convertToMIME(Document.CVT_RT_TO_PLAINTEXT_AND_HTML);
String dxl = exporter.exportDxl(doc);
int idxStart = dxl.indexOf(tagStart);
int idxEnd = dxl.indexOf(tagEnd);
if (idxStart != -1 && idxEnd != -1 && idxEnd > idxStart)
{
mimeDoc = dxl.substring(idxStart + tagStart.length(), idxEnd);
}
return mimeDoc;
}
}
$KeepPrivate
將防止任何包含它的文檔失敗。因此,如果您也要轉換這些文檔,請包括doc.removeItem("$KeepPrivate")
。
也在調用程序中:
Session s = NotesFactory.createSession((String)null, (String)null, NotesAuth.getPassword());
s.setConvertMIME(false);
setConvertMIME(false)
表示不將任何本地MIME格式的文檔轉換為Notes格式。如果您的目標是執行MIME轉換,則非常有用。節省一點時間和任何往返錯誤。
我使用以下代碼在呼叫程序中選擇電子郵件:
if ("Memo".equals(doc.getItemValueString("Form")) ||
"Reply".equals(doc.getItemValueString("Form")))
對于我的用例,我使用了Notes文檔的UUID和'*.EML'
來為每個電子郵件消息創建單獨的文件。然后,這些郵件已成功導入到另一個電子郵件系統。
這篇關于如何以編程方式將Lotus Notes電子郵件文檔轉換為MIME格式的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,