2010-04-06 50 views
85

我有一个byte[]与文件的内容。我想用System.Net.Mail作为附件发送。如何从字节数组添加电子邮件附件?

我注意到附件类有1个过载接受一个流。

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

是否可以将byte[]通过此超载?

回答

160

最简单的方法:

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

请注意,除非你做时髦的东西与异步操作,MemoryStream是安全离开未予处置,这可能使生活变得更容易。诚然,没有保证这将是未来的事实,但我认为它不太可能会改变。我看不到任何表示,其流:(

+1

谢谢乔恩,正是我需要的! – 2010-04-06 10:07:35

+2

好点,我注意到添加基于文件的附件时,我需要处置附件对象以释放文件上的句柄。当然,这个流应该由GC来处理,因为它不是IO操作? – 2010-04-06 10:14:47

+0

@JL:确实如此。 – 2010-04-06 12:48:52

30

是否附件的处置处置你需要使用适当的MemoryStream constructor overload转换byte[]MemoryStream

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

注意,参数为Attachment's constructor指定附件的内容类型的名称,而不是附件本身的名称

+2

看来,名称参数是文件的名称,而不是内容类型。请参阅备注:https://msdn.microsoft.com/en-us/library/system.net.mime.contenttype.name.aspx – 2017-05-24 05:44:04