مرفق البريد الإلكتروني من MemoryStream يأتي فارغ
-
02-10-2019 - |
سؤال
_data هي مجموعة بايت [] من بيانات المرفق.
عندما أفعل هذا:
var ms = new MemoryStream(_data.Length);
ms.Write(_data,0,_data.Length);
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name));
المرفق يأتي فارغ. في الواقع ، تعرض Outlook ملفات الملفات ولكنها غير صحيحة.
حسنًا ، اعتقدت أن هناك مشكلة في _data. ثم قررت تجربة هذا النهج:
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));
وهذا يعمل. ما الخطأ في الأول؟
المحلول
مع النموذج الأول ، أنت لا "إعادة ربط" الدفق:
ms.Position = 0;
لذلك كان يحاول القراءة من نهاية من الدفق ، حيث لم يكن هناك أي بيانات.
طريقة أبسط لإنشاء MemoryStream هي مجرد استخدام المُنشئ:
var ms = new MemoryStream(_data);
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name));
نصائح أخرى
لا تستخدم getBuffer. يستخدم ms.ToArray().
لا تنتمي إلى StackOverflow