【问题标题】:Serialize a mapi message in c++在 C++ 中序列化 mapi 消息
【发布时间】:2016-05-27 09:28:32
【问题描述】:

我想要做的是将 mapimessage 对象 (LPMESSAGE) 转换为可传输的格式,假设将其序列化为字节(我更喜欢这种方法)或 xml 格式。在这种情况下,最佳做法是什么?怎么做?有图书馆可以这样做吗? 注意:我可以将 lpmessage 转换为 mime 并返回,但我注意到当我使用 iconversionsession 时它会丢失很多属性。

【问题讨论】:

    标签: c++ visual-c++ com atl mapi


    【解决方案1】:

    如果您有权访问这些类的内部信息(我相信您确实如此),我建议您阅读此关于序列化的常见问题解答:https://isocpp.org/wiki/faq/serialization。关于这个话题,你想知道的都有。 (提示:如果你不这样做,那么你总是可以从它们派生并使用额外的序列化方法扩展它们的接口。)

    如果您对实现自己的解决方案不感兴趣,可以尝试第 3 方,例如 boost 序列化库:http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html

    【讨论】:

    • 感谢 Piotr 的意见,我正在寻找现成的解决方案。 boost 库会序列化 mapi 对象吗?
    【解决方案2】:

    您可以将 IMessage 转换为 .MSG 文件。虽然不是一个完美的过程,但大多数属性都会保留下来,大多数时候,Outlook 可以打开这些序列化的邮件,因此它们更易于使用(和验证)。搜索 OpenIMsgOnIStg 的代码示例。

    如果您不想使用 MSG 作为您的序列化格式,那么您将不得不自己推出。 IMAPIProp 对象只是带有数字 ID 的属性包,但所有不同类型的属性值都必须以不同方式持久化。

    【讨论】:

    • 谢谢你的回答,我已经这样做了,但我不想对文件进行 IO 操作,有没有办法在不实际保留 msg 文件的情况下使用 OpenIMsgOnIStg?
    • 是的——使用 CreateILockBytesOnHGlobal 和 StgCreateDocfileOnILockBytes 而不是 StgCreateDocfile。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多