MemoryStream 不填充附件

MemoryStream doesn't fill attachment

我正在为 C# 开发一种方法,用于将字节 [] 作为附件发送。 下面的方法可以正常发送邮件,但是附件总是空的。

 public bool envio(MailMessage mail, SmtpClient cliente, byte[] origen)
        {
            bool res = true;
            System.IO.MemoryStream ms;
            System.IO.StreamWriter writer;

            ms = new System.IO.MemoryStream();
            writer = new System.IO.StreamWriter(ms);

            try
            {    
                writer.Write(origen);
                writer.Flush();                

                System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Plain);
                System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(ms, ct);
                attach.Name = "Mensaje";
                mail.Attachments.Add(attach);

                cliente.Send(mail);

            }

            catch (Exception ex)
            {

                res = false;
            }

            finally

            {
                writer.Close();
                writer.Dispose();                
                ms.Close();
                ms.Dispose();
            }
            return res;

        }

我很确定这对于专业开发人员来说应该是显而易见的。但我找不到解决方案。

提前致谢。

当你完成对流的写入时,它的位置是在数据的末尾。所以当有人试图从流中读取时,就没有什么可读的了。解决方法很简单:

writer.Write(origen);
writer.Flush();
ms.Position = 0;

此外,由于您在此处处理的是纯文本,因此请注意编码。尽可能使用显式编码以尽量减少编码问题:)