2011-10-31 6 views
4

이 질문은 다소 긴 생각이지만, 아무런 쓸모없이 몇 시간을 보냈습니다. 웹 서버에 이메일 파일을 생성하는 코드가 있으며 사용자가 해당 이메일을 다운로드하여 Outlook에서 열 수 있습니다. 여기에서 그들은 이메일을 여러 사람들에게 보내기 전에 다양한 수동 변경을 할 수 있습니다.Outlook .MSG와 .OFT 파일 형식간에 차이점이 있습니까?

지금은 기본적으로 이메일 템플릿 인 .OFT 파일을 생성합니다. 내가하고 싶은 것은 실제 이메일 인 .MSG 파일을 생성하는 것입니다. 보기의 이진 관점에서 볼 때 이러한 파일 형식은 동일합니다. 그들은 동일한 스트림 ID와 속성 및 물건을 가지고 있습니다.

내 접근 방식은 Outlook에서 빈 이메일 메시지를 먼저 만든 다음 Base.oft라는 파일에 저장하는 것이 었습니다. 내 코드에서 문서를 열고 HTML 전자 메일 본문의 ID 인 스트림 ID __substg1.0_1013001E을 수정합니다. 그런 다음 파일을 저장하고 필렛에 작성합니다. 이것은 완벽하게 작동합니다.

MSG 형식으로 동일한 접근 방식을 시도했습니다. 빈 이메일 메시지를 작성하여 Base.msg로 저장하고 동일한 스트림 ID를 수정합니다. 결과 파일을 보면 새로운 몸체가 실제로 거기에 있으며 저장됩니다. 그러나 전자 메일을 열면 본문이 여전히 비어 있습니다.

Outlook에서 본문을 입력하고 기본 파일에 저장하면 그 스트림이 0_1013001E 스트림에서 볼 수 있습니다. 그런 다음 다른 본문으로 해당 스트림을 수정하면 새 본문이 실제로 파일에 저장되었는지 확인할 수 있지만 Outlook에서 메시지를 열면 이전 본문이 표시됩니다. 전자 메일 본문이 .MSG 형식의 파일에서 다른 위치에 저장되어있는 것처럼 보이지만 각 스트림을 살펴본 결과 전자 메일 본문처럼 보이는 다른 내용은 찾을 수 없습니다.

아마도 .MSG 파일은 암호화되어 있거나 해당 본문이 .OFT 파일과 달리 독점적 인 바이너리 형식으로 저장되어 있습니까? 다행스럽게도 인터넷을 샅샅이 뒤졌고 기본적으로 이러한 형식을 전혀 발견하지 못했기 때문에 누군가이 사실에 대한 통찰력을 가지고 있기를 바랍니다.

업데이트 :

는 그것은 .MSG 형식으로 저장을 보인다 스트림 ID __substg1.0_10090102의 몸 - 일부 바이너리 형태로 (확실하지 않은 것.) 인코딩 내가 스트림을 삭제 (또는으로 설정하면 \0 하나는, 파일이됩니다 손상. 모든

답변

3

첫째, 원시의 서브 번호에서 벗어나 해당 MAPI 속성에 대한 구글이 및 관련 주제에 대한 자세한 정보를 찾을 수 있습니다. 예를 들어, 1013 PR_HTML과 1009 PR_RTF_COMPRESSED입니다 MAPI에는 한 형식에서 다른 형식으로 본문을 동기화하는 방법이 있습니다.

MSDN의 this 문서를 참조하면 모든 콘텐츠 관련 MAPI 속성 (예 : .MSG 파일 내의 다른 "스트림").

PR_RTF_COMPRESSED를 쓰려면 스트림을 WrapCompressedStream 안에 랩핑하십시오. 반면에 특정 상황에서는 코드에서 MAPI 종속성을 피할 수 있으므로 PR_STORE_SUPPORT_MASK을 찾고 STORE_UNCOMPRESSED_RTF 비트를 설정하는 것이 좋습니다. 이렇게하면 PR_RTF_COMPRESSED 하위 스트림에서 직선 RTF를 사용할 수 있습니다. 또는 Outlooks 멋진 html-wrapped-in-rtf, 용감한 느낌이 있다면.

이 재료는 마음이 희미하기는하지만, 이미 .MSG 서브 스트림 쓰기를 어떻게 처리하고 있는지는 알지 못합니다. 필자는 이것이 가능할 것이라고 추측합니다.

+0

감사합니다. 그 비트를 찾는 것이 내 최선의 방법이라고 생각합니다. 실제로 RTF 스트림을 원하지 않습니다. HTML 스트림을 사용하여 수정하고 싶습니다. 그리고 MAPI 종속성을 취하는 것이 옳습니다. 웹 서버는 나쁜 생각 일 것입니다. 아마도 Outlook 설치 또는 무언가에서 모든 종류의 모호한 DLL을 찾아서 관리 된 래퍼를 써야 할 것입니다. –

0

형식과 관련해서는 아무런 차이가 없습니다. MSG 파일은 CLSID_MailMessage ({00020D0B-0000-0000-C000-000000000046})

을 사용하지만 OFT 파일은 저장소 클래스 (WriteClassStg)로 CLSID_TemplateMessage ({0006F046-0000-0000-C000-000000000046}