从 Lotus Notes 解析 MIME 电子邮件

Posted

技术标签:

【中文标题】从 Lotus Notes 解析 MIME 电子邮件【英文标题】:Parse MIME email from Lotus Notes 【发布时间】:2016-12-18 09:49:00 【问题描述】:

我正在尝试使用 .NET Domino 互操作解析来自 Lotus notes 的 MIME 电子邮件。当电子邮件不是 MIME 格式时,我已经通过简单的NotesDocument.GetFirstItem("Body").Text; 子句成功获取正文内容。但是,使用 MIME 时,我在尝试解析正文内容时得到空字符串或空字符串。

var session = new NotesSession();
session.Initialize("RadioLotus028");
session.ConvertMime = false;
var db = session.GetDatabase("PRGLNApps01/CZ/RFERL", "mail-in\\SEEurope\\MIA.nsf", false);
if (db == null) throw new ArgumentNullException("cannot load database");

var legnth = db.AllDocuments.Count;
for (int i = 1; i < legnth; i++)

    NotesDocument doc = db.AllDocuments.GetNthDocument(i);
    NotesMIMEEntity bodyMIME = doc.GetMIMEEntity();

    NotesStream stream = session.CreateStream();
    //bodyMIME.GetContentAsBytes(stream);
    //bodyMIME.GetEntityAsText(stream);
    bodyMIME.GetContentAsText(stream);

    string bodyString = stream.ReadText();
    var bodyString2 = stream.Read();
    string bodyString3 = bodyMIME.ContentAsText;

    var from = doc.GetFirstItem("From").Text;
    var subject = doc.GetFirstItem("Subject").Text;                   

有人遇到过这个问题吗?或者如何以 html 或 RichfullText 或任何其他方式获取正文内容?

【问题讨论】:

您没有测试邮件正文中是否包含 MIME 或富文本。您确定您在此邮箱中处理的邮件都是 MIME 吗?您可能应该使用 doc.hasItem("$NoteHasNativeMIME") 进行检查。 你是对的!这只是一个代码示例。最终版本包含内容类型之间的切换。因此,不同的分支负责 RichText,而不同的分支负责 MIME 正文。 :) 感谢您的评论,这将为某人节省一些时间。 【参考方案1】:

您很可能需要找到子 MIME 实体。以下 Java 逻辑应该可以帮助您朝着正确的方向前进:

MIMEEntity mime = sourceDoc.getMIMEEntity(bodyField);
if (mime != null) 
    // If multipart MIME entity
    if (mime.getContentType().equals("multipart")) 
        // Find text/html content of each child entity
        MIMEEntity child1 = mime.getFirstChildEntity();
        while (child1 != null) 
            if (child1.getContentType().contains("text")) 
                html = child1.getContentAsText();
            
            MIMEEntity child2 = child1.getFirstChildEntity();
            if (child2 == null) 
                child2 = child1.getNextSibling();
                if (child2 == null) 
                    child2 = child1.getParentEntity();
                    if (child2 != null) 
                        child2 = child2.getNextSibling();
                    
                
            
            child1 = child2;
        
     else 
        // Not multipart
        html = mime.getContentAsText();
    

【讨论】:

感谢您的解决方案是正确的...我一直都在想念它! :(

以上是关于从 Lotus Notes 解析 MIME 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Powershell 查找 Lotus Notes 互联网电子邮件地址

我可以在没有 COM 的情况下将 x-headers 添加到 Lotus Notes 电子邮件消息吗?

Lotus Notes电子邮件作为另一封电子邮件的附件

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

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

Lotus Notes 富文本中的 AX 2009 附件