【问题标题】:Extended MAPI -Reading mail body adds space character after every charachter扩展 MAPI - 阅读邮件正文在每个字符后添加空格字符
【发布时间】:2020-12-01 14:58:59
【问题描述】:

我正在尝试使用扩展 MAPI 解析电子邮件。

为了获取流指针,我使用LPMAPIPROP::OpenProperty()PR_BODY 标记返回IStream*,并使用IStream::Read() 方法将数据读取到缓冲区。

由于某种原因,当我使用 MFCMAPI 打开电子邮件时,正文很好。例如,"ABC"。但是,当我尝试以编程方式读取缓冲区时,每个字符后都会出现空格字符,例如"A B C"

【问题讨论】:

    标签: c++ outlook exchangewebservices mapi


    【解决方案1】:

    是空格(0x20)还是0x00?如果你打开PR_BODY_W(而不是PR_BODY_A),你最终会得到一个Unicode字符串(每个字符两个字节)而不是一个单字节字符串。

    【讨论】:

    • 不,它是一个空格 0x20,而不是一个空终止符 0x0。我打开PR_BODY_W Instaed 是 0x65 0x00 0x66 0x00 它是 0x65 0x00 0x20 0x00 0x66 0x00...
    • 这是您在 MFCMAPI 或 OutlookSpy 中看到的(单击 IMessage,选择 PR_BODY 属性,单击“值”编辑框旁边的“...”)?
    • 您也可以尝试在 OutlookSpy 中打开 PR_BODY_W - 右键单击​​属性,选择 IMAPIProp::OpernProperty,选择 IID_IStream。
    • 我也尝试过 OutlookSpy,但结果是一样的。
    • 那么你看不到东西——你真的有多余的空间。您是否在 PR_RTF_COMPRESSED 中看到了相同的内容(这是 Outlook 实际显示的内容)?
    【解决方案2】:

    由于某种原因,PR_RTF_COMPRESSED 已损坏,而不是显示 RTF,它只显示 PR_BODY,每个字符之间有空格。我认为这是因为我试图手动设置 PR_RTF_COMPRESSED 而不是让 Outlook 为我设置它。

    【讨论】:

    • 只需要设置PR_RTF_COMPRESSED(或调用RtfSync)如果商店本身不支持RTF(STORE_RTF_OK bit in PR_STORE_SUPPORT_MASK)
    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多