如何以编程方式将 Lotus Notes 电子邮件文档转换为 MIME 格式
How to Programmatically Convert Lotus Notes email Document to MIME Format
我开始开发一个复杂的解决方案,然后发现 DxlExporter
将为您完成所有工作。我想分享这个简单的解决方案。
通过 convertToMIME()
将文档转换为 MIME
后,使用 DxlExporter
完成剩下的工作。它创建包含 <mime>
标记的 XML 输出,完全转换的 MIME 格式文档的输出位于该标记中。此代码不进行完整的 XML 解析。它只是抓取 <mime> </mime>
标签之间的所有内容。我已经使用此代码成功转换了数以万计的电子邮件文档,只有少数失败——所有这些都来自格式错误的外部电子邮件文档。我在 Notes 发起的电子邮件文档上取得了 100% 的成功。
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 格式。如果您的 objective 是进行 MIME 转换,则很有用。节省一点时间和任何往返不准确。
我在调用程序中使用以下代码 select 电子邮件:
if ("Memo".equals(doc.getItemValueString("Form")) ||
"Reply".equals(doc.getItemValueString("Form")))
对于我的用例,我使用 Notes 文档的 UUID 以及 '*.EML'
为每封电子邮件创建单独的文件。然后将这些成功导入到另一个电子邮件系统中。
我开始开发一个复杂的解决方案,然后发现 DxlExporter
将为您完成所有工作。我想分享这个简单的解决方案。
通过 convertToMIME()
将文档转换为 MIME
后,使用 DxlExporter
完成剩下的工作。它创建包含 <mime>
标记的 XML 输出,完全转换的 MIME 格式文档的输出位于该标记中。此代码不进行完整的 XML 解析。它只是抓取 <mime> </mime>
标签之间的所有内容。我已经使用此代码成功转换了数以万计的电子邮件文档,只有少数失败——所有这些都来自格式错误的外部电子邮件文档。我在 Notes 发起的电子邮件文档上取得了 100% 的成功。
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 格式。如果您的 objective 是进行 MIME 转换,则很有用。节省一点时间和任何往返不准确。
我在调用程序中使用以下代码 select 电子邮件:
if ("Memo".equals(doc.getItemValueString("Form")) ||
"Reply".equals(doc.getItemValueString("Form")))
对于我的用例,我使用 Notes 文档的 UUID 以及 '*.EML'
为每封电子邮件创建单独的文件。然后将这些成功导入到另一个电子邮件系统中。