How to Programmatically Convert Lotus Notes email Document to MIME Format(如何以编程方式将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格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何以编程方式将Lotus Notes电子邮件文档转换为MIME格式
基础教程推荐
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01