【问题标题】:reading Lotus Notes documents via COM通过 COM 读取 Lotus Notes 文档
【发布时间】:2013-11-04 20:22:11
【问题描述】:

我正在尝试通过 python 和 com 阅读 Lotus Notes 数据库中的电子邮件。 (使用pythonwin和win32com)

我可以连接到数据库并读取 NotesDocument 项目,但是

doc = folder.GetFirstDocument()
doc.GetItemValue('Body')

返回电子邮件的纯文本内容。我可以获得标题、主题、日期等,但正文是纯文本。我正在尝试获取包含链接和其他格式的电子邮件的 HTML 源代码。我知道这些东西在那里,因为我可以在 Notes 中查看-->显示--> 页面源代码。

我试过了

doc.GetMIMEEntity('Body')

但这会返回 None。

【问题讨论】:

    标签: python com lotus-notes lotus-domino lotusscript


    【解决方案1】:

    正文是富文本项。您将无法访问正文字段的 HTML 版本,但您可以使用 NotesRichText... 类在富文本项中导航。

    NotesRichTextNavigator 类有一个示例可以帮助您入门。不幸的是,要在那个物体中四处走动并不容易。

    【讨论】:

    • 有趣 - 我无法创建导航器对象。 doc.GetFirstItem('Body').CreateNavigator() 引发异常,没有 CreateNavigator 这样的属性。
    • 知道为什么正文项的行为不像富文本项吗?它似乎没有 GetFormattedText() 或文档中的许多其他函数/属性。
    • 自从我使用 python COM 调用 lotus notes 后端类以来已经有很长时间了...但是,python 是否隐式地将您的项目转换为字符串,从而使 CreateNavigator() 没有上下文...?我可能会尝试将其转换为 mime 并尝试获取 mime 实体,以查看是否以这种方式获取对象。
    • 我会避免链接方法。做bodyItem = doc.GetFirstItem("Body"),然后对bodyItem进行操作。在 Panu 的回答中查看我的 cmets。请注意,甚至有一个不为人知的情况,即 Body 项目从字面上消失。即,您检查 doc.hasItem("Body") - 您应该始终这样做! - 它就在那里,但是当你执行 doc.getFirstItem("Body") 时,它就消失了。当 convertMIME=true(默认为默认值)并且消息是多部分 MIME 且没有内容时,可能会发生这种情况。我在这里有一篇关于该案例的旧博客文章:poweroftheschwartz.com/web/blog/poweroftheschwartz.nsf/d6plinks/…
    【解决方案2】:

    尝试在获得会话的位置后立即添加此行:

    session.ConvertMIME = False
    

    更新:

    Barry 评论说它是这样工作的:

    doc.GetFirstItem("Body").GetMIMEEntity()
    

    【讨论】:

    • 好的 - 现在正文只是空白,u''。主题和标题等其他值仍在通过。
    • 这是因为 Body 项的类型可以是 Note Rich Text 或 MIME。关闭转换时,您需要测试类型,然后使用与 NotesRichTextItem 关联的类/方法,或与 NotesMimeEntity 关联的类。
    • 关闭 convertMIME 后,执行 bodyItem = doc.GetFirstItem("Body"),然后检查 bodyItem.Type()。这里有一个值列表:www-01.ibm.com/support/docview.wss?uid=swg21098986 请注意,您不能指望某个项目是预期的类型。 Notes 是无模式的。正文几乎总是富文本或 MIME,但如果您正在处理未知数据源,它可能是任何东西。具体来说,我很少看到纯文本 (1280) 和 HTML (21)。很大程度上取决于实际创建消息的软件。从理论上讲,它可以是任何东西。
    • 谢谢!我必须 bodyItem = doc.GetFirstItem("Body") 后跟 mime = bodyItem.GetMIMEEntity()。然后我就能够执行 mime.ContentAsText 之类的操作来读取和解析 html 内容。
    • 太棒了!我认为 doc.GetMIMEEntity('Body') 会做同样的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多