如何为System.Net.Mail.MailMessage设置附件文件编码?

时间:2014-05-09 10:27:33

标签: c# .net encoding attachment system.net.mail

我使用System.Net.MailMailMessage发送一系列Attachment

为此,我使用MemoryStream StreamWriter填充Encoding.UTF8数据。 然后,我使用Attachment创建MemoryStream。我可以设置附件的MIME类型,文件名,文件名编码等。但我无法找到的是我如何明确设置附件编码......

using (var ms = new MemoryStream())
using (var sw = new StreamWriter(ms, Encoding.UTF8))
{
    //Fill ms with data, using sw

    ms.Position = 0;
    Attachment att = new Attachment(ms, attachmentFileName, MediaTypeNames.Text.Plain);

    MailMessage.Attachments.Add(att);
    SmtpClient.Send(mailMessage);
}

我如何/在哪里说明附件的编码?

我不是编码方面的专家,所以如果我想要完成一些完全无用和/或不可能的事情,我也希望听到它......

2 个答案:

答案 0 :(得分:1)

我在Attachment中找到了这个静态方法:

public static Attachment CreateAttachmentFromString(
    string content,
    string name,
    Encoding contentEncoding,
    string mediaType
)

所以这可能是解决方案:

Attachment att = Attachment.CreateAttachmentFromString(
    Encoding.UTF8.GetString(ms.ToArray()),
    attachmentFileName,
    Encoding.UTF8,
    System.Net.Mime.MediaTypeNames.Text.Plain);

它会强制您从string创建,但我希望看到另一种仅使用流的方法。

答案 1 :(得分:1)

您可以将附件的Charset属性的ContentType属性设置为valid value