我开始开发一个复杂的解决方案,然后发现DxlExporter可以为你做所有的工作。我想分享这个简单的解决方案。
DxlExporter
9jyewag01#
@jch,我用你的代码测试Notes生成的消息时效果很好,但我对来自互联网的消息失去了html保真度,或者根本没有html。你有没有尝试过另一种方法来处理互联网生成的帖子(那些带有一些html表格和div的帖子)?我尝试添加以下内容,但没有成功:
exporter.setRichTextOption(RICHTEXTOPTION_RAW); exporter.setConvertNotesBitmapsToGIF(true); if (doc.hasItem("$KeepPrivate")) { doc.removeItem("$KeepPrivate"); } doc.convertToMIME(Document.CVT_RT_TO_HTML);
mw3dktmi2#
通过convertToMIME()将文档转换为MIME后,使用DxlExporter完成其余工作。它创建包含<mime>标记的XML输出,完全转换后的MIME格式文档的输出驻留在该标记中。此代码不执行完整的XML解析。它只是获取<mime> </mime>标记之间的所有内容。我用这段代码成功地转换了成千上万的电子邮件文档,只有少数几次失败--所有的失败都来自格式不好的外部电子邮件文档。我在Notes原始电子邮件文档上有100%的成功。
convertToMIME()
MIME
<mime>
<mime> </mime>
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")。同样在调用程序中:
$KeepPrivate
doc.removeItem("$KeepPrivate")
Session s = NotesFactory.createSession((String)null, (String)null, NotesAuth.getPassword()); s.setConvertMIME(false);
setConvertMIME(false)说不要将任何本机MIME格式的文档转换为Notes格式。如果您的目标是进行MIME转换,这很有用。节省了一点时间和任何往返不准确。我使用下面的代码在调用程序中选择电子邮件:
setConvertMIME(false)
if ("Memo".equals(doc.getItemValueString("Form")) || "Reply".equals(doc.getItemValueString("Form")))
在我的用例中,我使用Notes文档的UUID沿着'*.EML'为每个电子邮件创建单独的文件,然后将这些文件成功导入到另一个电子邮件系统中。
'*.EML'
2条答案
按热度按时间9jyewag01#
@jch,我用你的代码测试Notes生成的消息时效果很好,但我对来自互联网的消息失去了html保真度,或者根本没有html。你有没有尝试过另一种方法来处理互联网生成的帖子(那些带有一些html表格和div的帖子)?
我尝试添加以下内容,但没有成功:
mw3dktmi2#
通过
convertToMIME()
将文档转换为MIME
后,使用DxlExporter
完成其余工作。它创建包含<mime>
标记的XML输出,完全转换后的MIME格式文档的输出驻留在该标记中。此代码不执行完整的XML解析。它只是获取<mime> </mime>
标记之间的所有内容。我用这段代码成功地转换了成千上万的电子邮件文档,只有少数几次失败--所有的失败都来自格式不好的外部电子邮件文档。我在Notes原始电子邮件文档上有100%的成功。$KeepPrivate
将防止任何包含它的文档失败。所以如果你也想转换那些文档,请包括doc.removeItem("$KeepPrivate")
。同样在调用程序中:
setConvertMIME(false)
说不要将任何本机MIME格式的文档转换为Notes格式。如果您的目标是进行MIME转换,这很有用。节省了一点时间和任何往返不准确。我使用下面的代码在调用程序中选择电子邮件:
在我的用例中,我使用Notes文档的UUID沿着
'*.EML'
为每个电子邮件创建单独的文件,然后将这些文件成功导入到另一个电子邮件系统中。