如何以编程方式将 Lotus Notes 电子邮件文档转换为 MIME 格式

Posted

技术标签:

【中文标题】如何以编程方式将 Lotus Notes 电子邮件文档转换为 MIME 格式【英文标题】:How to Programmatically Convert Lotus Notes email Document to MIME Format 【发布时间】:2021-07-21 05:40:19 【问题描述】:

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

【问题讨论】:

我已经有 10 年左右没有听说过 Lotus Notes 了。有趣的是它仍在某处使用。 @PM77-1 :该产品多年前更名为 IBM Notes(和 IBM Domino),在 HCL 几年前购买后,它现在更名为 HCL Notes 和 HCL Domino。版本 11 于去年发布,版本 12 处于测试阶段,将于今年夏天发布,版本 13 已在计划中。安装基数实际上正在增长,而且它用于比您想象的更多的地方。 【参考方案1】:

通过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 格式。如果您的目标是进行 MIME 转换,这很有用。节省一点时间和任何往返误差。

我使用以下代码在调用程序中选择电子邮件:

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

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

【讨论】:

以上是关于如何以编程方式将 Lotus Notes 电子邮件文档转换为 MIME 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Lotus Notes 中创建一个按钮以查看收件箱中的最新电子邮件?

为啥此电子邮件在 Lotus Notes 中不能正确显示?

Lotus Notes闪退如何修复

为啥我的Lotus Notes 6.5打不开?求高手

C#操作Lotus Notes邮件

求助Lotus Notes 8.5闪退的问题