【问题标题】:Set Content-Transfer-Encoding to Quoted-printable with .NET MailMessage使用 .NET MailMessage 将 Content-Transfer-Encoding 设置为 Quoted-printable
【发布时间】:2015-03-17 11:28:09
【问题描述】:

当我使用 .NET SmtpClient 发送邮件时,我注意到在检查邮件的源代码时内容传输编码设置为 base64。

我需要将其设置为 Quoted-printable。 我怎样才能做到这一点? 提前致谢

public virtual MailMessage GetMailMessage(string body, string from, string [] user_emails, string [] back_office_emails, string subject)
{             
    MailMessage message = new MailMessage();
    message.IsBodyHtml = true;
    message.From = new MailAddress(from);            
    foreach (string email in user_emails)
    {
        message.To.Add(new MailAddress(email));
    }            
    if (back_office_emails != null)
    {
        foreach (string email in back_office_emails)
        {
            message.Bcc.Add(new MailAddress(email));
        }
    }
    message.Subject = subject;
    message.Body = body;
    message.BodyEncoding = System.Text.Encoding.UTF8;
    return message;
}

protected virtual void SendEmailTemplate(string body, string from, string[] user_emails, string[] back_office_emails, string subject)
{
    MailMessage message = GetMailMessage(body, from, user_emails, back_office_emails, subject);
    SmtpClient client = new SmtpClient(ConfigurationManager.AppSettings["SmtpClient"]);
    client.Send(message);
}

【问题讨论】:

    标签: c# .net smtpclient


    【解决方案1】:

    因为您将message.BodyEncoding 设置为System.Text.Encoding.UTF8,所以传输编码会自动设置为Base64。 (source in remarks section)

    根据您需要 Quoted-printable 传输编码的原因,您需要相应地调整 MailMessage 对象以将传输编码设置为 Quoted-printable。

    更多阅读可以做here

    【讨论】:

    • 其实我需要两个 Content-Type: text/html; charset=utf-8 和 Content-Transfer-Encoding:quoted-printable。如果我将 bodyEncoding 删除为 UTF8,我会得到 Quoted printable 但 charset 不再是 utf-8 而是 us-ascii
    • 为什么需要Content-Transfer-Encoding Quoted-printable?
    • 将 BodyEncoding 设置为 UTF8 并没有改变我的 Content-Transfer-Encoding。
    【解决方案2】:

    解决方案:

    AlternateView plainTextView = AlternateView.CreateAlternateViewFromString(body.Trim(), new ContentType("text/html; charset=UTF-8"));
    plainTextView.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
    message.AlternateViews.Add(plainTextView);
    

    【讨论】:

      【解决方案3】:

      当使用.NET 4.5或更高版本时,应该可以使用

      message.BodyTransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable;
      

      https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.mailmessage.bodytransferencoding?view=netframework-4.5

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 2012-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 2017-10-03
        相关资源
        最近更新 更多