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


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.