我正在使用Exchange 2010(不允许调用者直接请求纯文本和HTML正文的Exchange 2013)。在EWS中,如何将邮件的纯文本和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(PR_INTERNET_CPID, out iCP))
{
// The code never enters here
}
if (item.TryGetProperty(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获取它)。
所以我需要说服Managed EWS库返回HTML和纯文本作为字符串或让我PR_INTERNET_CPID值。我能为此做些什么?
2016-11-25
Alex