2009-08-20 3 views
1

Word CSS와 XML 마법이 적절한 비트로 포함 된 HTML 문서를 생성하여 MS Word 출력을 생성하는 제품을 만들고 있습니다. 이제 RTF (이미지 및 스타일이 지정된 텍스트)를 문서에 임베드해야하므로 .NET의 멀티 파트 HTML 생성 기능을 살펴볼 필요가 있습니다.디스크 액세스없이 .NET의 Multipart HTML 및 포함 된 이미지?

RTF 스 니펫을 메모리의 이미지로 변환 한 다음 Base64로 인코딩 된 데이터를 MHTML 개체에 직접 포함시켜 MHTML 문서를 생성하고 싶습니다. 지금까지 .NET 솔루션을 찾을 수 없습니다.

MS CDO stuff은 유망하지만 첨부 파일을 만드는 유일한 방법은 데이터에 URL을 제공하고 AddRelatedBodyPart()을 사용하여 개체에 추가하는 것입니다.

또한 System.Net.Mail 패키지는 (here과 이전 질문에 설명 된대로) 매력적으로 보이지만 생성 된 메일 개체를 문자열로 변환하는 간단한 방법은 보이지 않습니다. API는 다음과 같습니다. 파일을 생성하지 않고 메일 메시지를 보내는 데 집중해야합니다.

지금 당장 CDO와 임시 디렉토리를 사용하는 접근법을 추진하고 있지만 장기적인 접근 방법으로는 불만 스럽습니다. 더 좋은 제안이 있습니까?

답변

1

System.Net.Mail이 사용자가 정의한 일종의 스트림으로 출력을 보내는 기능에 대한 요구가 많지 않았지만 이에 대한 이야기가있었습니다. 시나리오에 대해 더 많은 정보를 줄 수 있습니까? 나는 사람들이이 기능을 추가하기위한 정당화의 관점에서 이것을 어떻게 사용하고 있는지 알고 싶다.

저는 리플렉션을 사용하여 메시지 스트림을 보내기 전에 FileStream의 출력 스트림을 다른 스트림으로 리디렉션 할 수 있다고 생각합니다. System.Net.Mail의 코드 대부분은 Stream 객체 주위에 데코레이터를 사용하므로 가능한 일일 것 같지만이 작업을 수행하는 방법에 대한 좋은 코드 스 니펫을 제공 할 수있는 리플렉션을 알지 못합니다. 또한 System.Net.Mail은 자체 base64 인코더를 사용하므로 충분히 빠릅니다. .Net 4.0에 대한 몇 가지 사항을 수정했습니다. 그래도 눈에 띄기는하지만 의심의 여지가 있지만 더 나은 성능을 얻을 수 있습니다.

+0

배경 : 데스크톱 응용 프로그램에서 Word (및 곧 Excel) 출력을 생성해야합니다. MS Office는 HTML + XML + CSS를 파일 형식으로 훌륭하게 지원합니다. 즉, 신중하게 만들어진 HTML 문서를 만들면 Word 출력을 생성 할 수 있습니다. 나는 HTML 출력을 생성해야하기 때문에 여러 가지 이유로 네이티브 Word 출력을 만드는 것을 선호합니다. Word에서 MHTML 파일을 올바르게 처리하므로 이미지가 포함 된 출력을위한 멋진 단일 파일 솔루션이됩니다. 그래서 동적으로 MHTML을 스트림에 생성하고 API 호출 (파일 아님)을 사용하여 입력을 생성하고 싶습니다. –

+0

정보 주셔서 감사합니다. 우리는 System.Net.Mail에서 MHTML 지원을 원하는 사람들로부터 많은 피드백을 받았지만 불행히도 .Net 4.0에 추가되지는 않지만 System.Net.Mail의 향후 릴리스에 대한 기능 목록에서 상당히 높습니다.시나리오 정보를 우리 PM에게 주겠다. –

+0

업데이트 : 우리 팀은 향후 개발을 위해이 요청을 공식적으로 추적하고 있으므로 System.Net.Mail에서 향후 어떻게 든 지원 될 것입니다. 이 기능과 다른 새로운 기능에 대한 업데이트는 NCL 블로그 (blogs.msdn.com/ncl)에서 확인하십시오. –

0

.NET의 Base64 인코딩 지원은 그리 빠르지 않으며 System.Net.Mail은 일반 용도가 아닙니다. CHilkat S/MIME을 사용하여 감 겼고 정상적으로 작동했습니다.

+0

사실 System.Net.Mail은 자체 base64 인코딩을 사용하며 우리의 perf 테스트에 따라 충분히 빠릅니다. 그것은 또한 꽤 일반적인 목적이지만 나는 그 주위에 몇 가지 결점이 있음을 인정합니다. –

+0

Jeff, Convert.ToBase64String의 구현을 두 번 확인했는데 정확하다고 생각됩니다. 즉, 내부 루프가 올바르게 언로드되므로 빨리 처리해야합니다. 이상한 점은이 작업을 수행하지 않은 네이티브 .NET Base64 변환 방법을 생각해 보았지만 어디서부터인지 모르겠다는 것입니다. 이 조기 발병 알츠하이머인가요? 아니면 어디에 있을지 생각할 수 있습니까? –

관련 문제