开发者

email attachment from the MemoryStream comes empty [duplicate]

This question already has answers here: FileResult with MemoryStream gives empty result .. what's the problem? (2 answers) Closed 1 year ago.

_data is a byte[] array of Attachment data.开发者_如何学编程

When I'm doing this:

 var ms = new MemoryStream(_data.Length); 
 ms.Write(_data,0,_data.Length);
 mailMessage.Attachments.Add(new Attachment(ms, attachment.Name));

Attachment comes empty. Actually outlook shows the filesize but it's incorrect.

Well, I thought there is a problem in my _data. Then I decided to try this approach:

 var ms = new MemoryStream(_data.Length); 
 ms.Write(_data,0,_data.Length);
 fs = new FileStream(@"c:\Temp\"+attachment.Name,FileMode.CreateNew);
 fs.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
 fs.Flush();
 fs.Close();
 mailMessage.Attachments.Add(new Attachment(@"c:\Temp\" + attachment.Name));

And that works. What's wrong with the first one?


With the first form, you're not "rewinding" the stream:

ms.Position = 0;

So it was trying to read from the end of the stream, where there wasn't any data.

A simpler way of creating the MemoryStream is to just use the constructor though:

var ms = new MemoryStream(_data);
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name));


Do not use GetBuffer. Use ms.ToArray().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜