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;
此外,由于您在此处处理的是纯文本,因此请注意编码。尽可能使用显式编码以尽量减少编码问题:)
我正在为 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;
此外,由于您在此处处理的是纯文本,因此请注意编码。尽可能使用显式编码以尽量减少编码问题:)