繁体   English   中英

如何以编程方式将 Lotus Notes email 文档转换为 MIME 格式

[英]How to Programmatically Convert Lotus Notes email Document to MIME Format

我开始开发一个复杂的解决方案,然后发现DxlExporter将为您完成所有工作。 我想分享这个简单的解决方案。

通过convertToMIME()将文档转换为MIME后,使用DxlExporter执行 rest 的工作。 它会创建 XML output ,其中包含一个<mime>标记,完全转换的 MIME 格式文档的 output 位于该标记中。 此代码不执行完整的 XML 解析。 它只是抓取<mime> </mime>标签之间的所有内容。 我已经使用此代码成功转换了成千上万的 email 文档,但只有少数失败 - 所有这些都来自格式错误的外部 email 文档。 我在源自 Notes 的 email 文档上取得了 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 格式。 如果您的目标是进行 MIME 转换,这很有用。 节省一点时间和任何往返误差。

我在调用程序中对 select email 消息使用了以下代码:

if ("Memo".equals(doc.getItemValueString("Form")) ||
        "Reply".equals(doc.getItemValueString("Form")))

对于我的用例,我使用 Notes 文档的 UUID 和'*.EML'为每个 email 消息创建单独的文件。 然后将这些成功导入另一个 email 系统。

@jch,我对您的代码进行的测试在 Notes 生成的消息中运行良好,而对于来自 inte.net 的消息,我失去了 html 的保真度,或者根本没有 html。 您是否尝试过另一种方式来生成 inte.net 的帖子(那些带有一些 html 表格和 div 的帖子)?

我尝试添加以下内容但没有成功:

    exporter.setRichTextOption(RICHTEXTOPTION_RAW); 
    exporter.setConvertNotesBitmapsToGIF(true); 
    if (doc.hasItem("$KeepPrivate")) {
        doc.removeItem("$KeepPrivate"); 
    }
    doc.convertToMIME(Document.CVT_RT_TO_HTML);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM