Как отправить электронную почту в формате richtext в Outlook?

Он отлично работает для отправки писем (в Outlook) в формате HTML, назначая строку типа текста/html, например:

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);
  }
}

электронная почта правильно распознается как HTML в Outlook (2003).
Но если я попробую rich text:

MediaTypeNames.RichText;

Outlook не обнаруживает этого, он возвращается к обычному тексту.
Как отправить письмо в формате rich text?

3 ответов


суть в том, что вы не можете сделать это легко с помощью системы.Сеть.Почта.

богатый текст в Outlook отправляется как winmail.файл dat в мире SMTP (вне Exchange).

winmail.файл dat-это сообщение TNEF. Таким образом, вам нужно будет создать свой richtext внутри winmail.файл dat (отформатирован по правилам TNEF).

однако, это еще не все. Outlook использует специальную версию сжатого RTF, поэтому вам также нужно будет сжать RTF вниз, прежде чем он добавлен в winmail.файл dat.

суть в том, что это трудно сделать, и если клиенту действительно, действительно нужна эта функциональность, я бы переосмыслил ее.

Это не то, что вы можете сделать с несколькими строками кода.Сеть.


вы также можете достичь этого, добавив другой альтернативный вид перед календарным представлением, как показано ниже:

var body = AlternateView.CreateAlternateViewFromString(bodyHtml, new System.Net.Mime.ContentType("text/html"));
mailMessage.AlternateViews.Add(body);

это сработало для меня..

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)
        { 
        }
    }