0

我正在使用 Exchange 2010(不是 Exchange 2013,它允许调用者直接请求纯文本和 HTML 正文)。

为了获得 HTML 正文,我使用了类似的东西:

ExtendedPropertyDefinition PR_BODY_HTML = new ExtendedPropertyDefinition(0x1013, MapiPropertyType.Binary);
ExtendedPropertyDefinition PR_INTERNET_CPID = new ExtendedPropertyDefinition(0x3FDE, MapiPropertyType.Long); 
PropertySet properties = new PropertySet(BasePropertySet.FirstClassProperties);
properties.RequestedBodyType = BodyType.Text;
properties.Add(EmailMessageSchema.Body);
properties.Add(PR_BODY_HTML);
properties.Add(PR_INTERNET_CPID);
...
byte[] htmlBodyBytes;
string htmlBody;
int iCP;
if (item.TryGetProperty<int>(PR_INTERNET_CPID, out iCP))
{
    // The code never enters here
}
if (item.TryGetProperty<byte[]>(PR_BODY_HTML, out htmlBodyBytes))
{
    htmlBody = Encoding.GetEncoding(65001).GetString(htmlBodyBytes);
}
string textBody = item.Body.Text;

对于纯文本正文,我得到了正确的字符串表示形式。但是 HTML 正文只给了我字节,我不知道要传递给 GetString 的代码页。目前,UTF-8 的代码页是硬编码的,但这不适用于生产。我需要找出 HTML 部分的代码页,或者找到另一种从消息中提取它的方法。当然,我可以对 EWS 设置 RequestedBodyType = BodyType.HTML 进行单独查询,但我最好不要进行其他查询。我认为 PR_INTERNET_CPID MAPI 属性 (0x3FDE) 将满足我的需求,但它从未填充(我仔细检查了它是否存在于邮件服务器上,但我无法通过 EWS 获取它)。

所以我需要说服托管 EWS 库将 HTML 和纯文本作为字符串返回,或者让我获得 PR_INTERNET_CPID 值。我能为此做些什么?

4

1 回答 1

1

好的,事实证明 PidTagInternetCodepage (PR_INTERNET_CPID) 的类型为 MapiPropertyType.Integer,而不是 MapiPropertyType.Long(尽管 MSDN 说 PT_LONG)。调整后,我可以很好地得到有问题的值。

于 2016-11-28T12:47:51.053 回答