Làm cách nào để thêm tệp đính kèm email từ một mảng byte?


110

Tôi có một byte[]với nội dung của tập tin. Tôi muốn gửi nó dưới dạng tệp đính kèm bằng cách sử dụng System.Net.Mail.

Tôi nhận thấy rằng lớp tệp đính kèm có 1 quá tải chấp nhận một luồng.

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

Có thể vượt byte[]qua quá tải này không?


BTW, bạn cũng có thể sử dụng att.ContentDisposition nếu bạn muốn đặt các thuộc tính khác của tệp đính kèm (ví dụ: CreationDate).
John Gilmer

Câu trả lời:


214

Cách đơn giản nhất:

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

Lưu ý rằng trừ khi bạn thực hiện những nội dung thú vị với các hoạt động không đồng bộ, MemoryStreamcòn không thì hãy yên tâm để không bị ảnh hưởng, điều này có thể giúp cuộc sống của bạn dễ dàng hơn. Phải thừa nhận rằng không có gì đảm bảo rằng điều đó sẽ đúng trong tương lai, nhưng tôi nghĩ điều đó không chắc sẽ thay đổi. Tôi không thể thấy bất kỳ dấu hiệu nào về việc việc hủy bỏ tệp đính kèm có hủy luồng của nó hay không :(


2
Điểm tốt, tôi nhận thấy khi thêm các tệp đính kèm dựa trên tệp, tôi cần phải loại bỏ đối tượng tệp đính kèm để giải phóng một xử lý trên tệp. Chắc chắn luồng nên được GC chăm sóc, vì nó không phải là một hoạt động IO?
JL.

FWIW, lớp Đính kèm của Mono gọi Disposedòng nội dung và từ một trường hợp thử nghiệm nhanh, .NET 4.0 cũng làm như vậy. Tôi không quá thích thú vì đây là trường hợp, nhưng nó là như vậy.
Matt Enright

34

Bạn cần chuyển đổi byte[]thành một MemoryStreambằng cách sử dụng quá tải hàm tạo MemoryStream thích hợp .

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

Lưu ý rằng tham số name cho phương thức khởi tạo của Attachment chỉ định tên của loại nội dung của phần đính kèm, không phải tên của chính phần đính kèm.


4
Có vẻ như tham số tên là tên của tệp, không phải kiểu nội dung. Xem nhận xét: msdn.microsoft.com/en-us/library/…
Uğur Aldanmaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.