2012-10-01 7 views
3

MS Exchange/Outlook 메시지는 MAPI를 사용하여 데이터를 저장합니다. 일반적인 MAPI 속성 중 하나는 메시지 본문의 서식있는 텍스트 버전 (0x1009, PR_RTF_COMPRESSED, PidTagRtfCompressed)을 포함합니다. 서식있는 텍스트 문자열의 구조가 잘못된 경우 Outlook 2003 및 이전 버전에서는 본문 내용을 표시하지 못합니다.서식있는 텍스트 구조 유효성 검사 RTF

예를 들어,이 RTF 코드는 닫는 "}"을 생략합니다.

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}} 
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par 

올바른 버전

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}} 
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par 
} 

이는 .NET 방법이나 내가 RTF 코드가 유효한지 여부를 테스트하는 데 사용할 수있는 라이브러리 있습니까입니까? 그렇지 않은 경우, C++ 및 Java 또는 COM 라이브러리에 개방되어 있습니다. 그렇지 않다면, RTF 문자열의 비정상을보고하는 응용 프로그램이 있습니까?

이상적인 해결책은 부정을 포함하는 행 번호를보고하는 것입니다. 적절한 솔루션은 RTF가 전체적으로 유효하고 잘 구성되어 있는지 여부를보고합니다.

이 문제는 MAPI 외부와 관련이 있습니다. 예를 들어 위에서 지정한 유효하지 않은 RTF 문자열이 .RTF 파일에 기록되면 WordPad 5.1에서 제대로 열리지 만 Word 2007에서는 오류를보고하고 파일을 복구하도록 요청합니다.


RTF를 서식있는 텍스트 상자로 스트리밍하는 것이 좋습니다. 이 코드 시도 :

private void button1_Click(object sender, EventArgs e) 
     { 
      string aaa = richTextBox1.Rtf; 
      richTextBox1.Rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 asdfasdf\par}"; 
      richTextBox1.Refresh(); 
     } 

여부 richTextBox1.Rtf은 "}"로 끝나는 여부, 서식있는 텍스트 상자가 표시이 그 내용과 같은 :

내가 오류를보고 할 찾고 있어요 솔루션 asdfasdf 내가 마지막 "}"을 생략하면.

답변

2

RTF를 숨겨진 RTF 컨트롤에로드 한 다음 스트리밍하지 않는 이유는 무엇입니까? 유효하지 않은 RTF를 정확히 설정하는 것은 무엇입니까? 나는 Outlook이 그렇게 생각하지 않습니다.

+0

변환 유틸리티가 무언가를 PST로 변환하는 데 사용 된 것 같습니다. 서비스 제공 업체에 누가 변환을 수행했는지 소스 이메일의 형식과 사용 된 변환 도구를 물어 보았습니다. –

+0

RTF를 RTF 컨트롤에로드한다면 RTF가 유효한지 여부를 알려주겠습니까? –

+0

내 문제를 해결하지 못했지만 대답을 수락했습니다. RTF가 심각하게 손상된 경우 RichTextBox.Rtf를 문자열과 같게 설정하면 "ArgumentException was unhandled", "파일 형식이 유효하지 않습니다."라는 결과가 발생합니다. 내가 필요로하는 것은 더 엄격한 것입니다 - 사소한 오류조차도 그 오류. –