6

通过像这样分配 text/html 内容类型字符串,以 HTML 格式发送电子邮件(到 Outlook)非常有用:

using (MailMessage message = new MailMessage())
{
  message.From = new MailAddress("--@---.com");
  message.ReplyTo = new MailAddress("--@---.com");
  message.To.Add(new MailAddress("---@---.com"));
  message.Subject = "This subject";
  message.Body = "This content is in plain text";
  message.IsBodyHtml = false;

  string bodyHtml = "<p>This is the HTML <strong>content</strong>.</p>";

  using (AlternateView altView = AlternateView.CreateAlternateViewFromString(bodyHtml,
    new ContentType(MediaTypeNames.Text.Html)))
  {
    message.AlternateViews.Add(altView);
    SmtpClient smtp = new SmtpClient(smtpAddress);
    smtp.Send(message);
  }
}

电子邮件在 Outlook (2003) 中被正确识别为 HTML。
但如果我尝试富文本:

MediaTypeNames.RichText;

Outlook 不会检测到这一点,它会退回到纯文本。
如何以富文本格式发送电子邮件?

4

3 回答 3

9

底线是,您不能使用 System.Net.Mail 轻松做到这一点。

Outlook 中的富文本在 SMTP 世界(Exchange 外部)中作为 winmail.dat 文件发送。

winmail.dat 文件是 TNEF 邮件。因此,您需要在 winmail.dat 文件中创建您的富文本(格式化为 TNEF 规则)。

然而,这还不是全部。Outlook 使用特殊版本的压缩 RTF,因此,在将 RTF 添加到 winmail.dat 文件之前,您还需要将其压缩。

最重要的是,这很难做到,除非客户真的、真的需要这个功能,否则我会重新考虑。

这不是您可以在 .NET 中用几行代码完成的事情。

于 2010-01-22T13:55:13.823 回答
1

您还可以通过在日历视图之前添加另一个替代视图来实现此目的,如下所示:

var body = AlternateView.CreateAlternateViewFromString(bodyHtml, new System.Net.Mime.ContentType("text/html"));
mailMessage.AlternateViews.Add(body);
于 2014-05-15T16:32:46.367 回答
1

这对我有用..

public void sendUsersMail(string recipientMailId, string ccMailList, string body, string subject)
    {
        try
        {  
            MailMessage Msg = new MailMessage();
            Msg.From = new MailAddress("norepl@xyz.com", "Tracker Tool");
            Msg.To.Add(recipientMailId);
            if (ccMailList != "")
                Msg.CC.Add(ccMailList);
            Msg.Subject = subject;
            var AltBody = AlternateView.CreateAlternateViewFromString(body, new System.Net.Mime.ContentType("text/html"));
            Msg.AlternateViews.Add(AltBody);
            Msg.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient("mail.xyz.com");
            smtp.Send(Msg);
            smtp.Dispose();
        }
        catch (Exception ex)
        { 
        }
    }
于 2017-05-26T13:05:20.940 回答