2016-11-25 3 views
0

발신자가 일반 텍스트와 HTML 본문을 직접 요청할 수있는 Exchange 2010이 아닌 Exchange 2010을 사용하고 있습니다. 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<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를 통해 얻을 수는 없습니다).

그래서 Managed EWS 라이브러리를 HTML 및 일반 텍스트를 문자열로 반환하거나 PR_INTERNET_CPID 값을 가져 오도록 설득해야합니다. 그것을 위해 무엇을 할 수 있습니까?

답변

1

좋습니다, PidTagInternetCodepage (PR_INTERNET_CPID)는 MapiPropertyType.Long이 아닌 MapiPropertyType.Integer 유형을 가지고 있습니다 (MSDN에서는 PT_LONG이라고 표시되어 있음). 조정이 끝나면 문제의 가치를 정당하게 얻을 수 있습니다.