email attachment from the MemoryStream comes empty [duplicate]
_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().
精彩评论