바이트 배열에서 이메일 첨부 파일을 추가하는 방법은 무엇입니까?


110

나는 byte[] 파일의 내용을. 을 (를) 사용하여 첨부 파일로 보내고 싶습니다 System.Net.Mail.

첨부 클래스에 스트림을 허용하는 오버로드가 1 개 있음을 알았습니다.

Attachment att = new Attachment(Stream contentStream,string name);

byte[]이 과부하 를 통과 할 수 있습니까?


BTW, 첨부 파일의 다른 속성 (예 : CreationDate)을 설정하려는 경우 att.ContentDisposition을 사용할 수도 있습니다.
John Gilmer

답변:


214

가장 간단한 방법 :

Attachment att = new Attachment(new MemoryStream(bytes), name);

비동기 작업으로 펑키 한 작업을 수행하지 않는 한 처리하지 MemoryStream않고 두어도 안전하므로 삶이 더 쉬워 질 수 있습니다. 분명히 그것이 미래에 사실 일 것이라는 보장 은 없지만 나는 그것이 바뀔 것 같지 않다고 생각합니다. 첨부 파일을 처리하면 스트림이 처리되는지 여부에 대한 표시를 볼 수 없습니다.


2
좋은 점은 파일 기반 첨부 파일을 추가 할 때 파일에 대한 핸들을 해제하기 위해 첨부 파일 개체를 처리해야한다는 것을 알았습니다. 스트림은 IO 작업이 아니기 때문에 GC에서 처리해야합니다.
JL.

FWIW, Mono의 Attachment 클래스 Dispose는 콘텐츠 스트림을 호출 하며 빠른 테스트 사례에서 .NET 4.0은 동일한 작업을 수행합니다. 나는 이것이 사실이라는 것을 매우 즐겁지 않지만 거기에 있습니다.
Matt Enright

34

당신은 변환해야 byte[]A와 MemoryStream적절한 사용 MemoryStream을 생성자 오버로드를 .

Attachment att = new Attachment(new MemoryStream(myBytes), name);

Attachment 생성자에 대한 name 매개 변수 는 첨부 파일 자체의 이름이 아니라 첨부 파일의 콘텐츠 유형 이름을 지정합니다.


4
이름 매개 변수는 콘텐츠 유형이 아닌 파일 이름 인 것 같습니다. 비고 참조 : msdn.microsoft.com/en-us/library/…
Uğur Aldanmaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.