使用.NET MailMessage将内容转换为Quoted-printable

4
当我使用.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);
}
3个回答

6

解决方案:

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
由于您将 message.BodyEncoding 设置为 System.Text.Encoding.UTF8,传输编码自动设置为 Base64。(来源见备注部分
根据您需要使用 Quoted-printable 传输编码的原因,您需要相应地调整 MailMessage 对象以将传输编码设置为 Quoted-printable。
更多阅读可以在这里进行。

实际上我需要同时使用Content-Type: text/html; charset=utf-8和Content-Transfer-Encoding: quoted-printable。如果我将bodyEncoding移除到UTF8,我可以得到Quoted printable,但字符集不再是utf-8而是us-ascii。 - FieryA
你需要Content-Transfer-Encoding Quoted-printable的原因是什么? - Bernd Linde
将BodyEncoding设置为UTF8对我来说并没有改变Content-Transfer-Encoding。 - Oliver Bock

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接