Как отправить письмо в формате Richtext в Outlook? - PullRequest
6 голосов
/ 21 января 2010

Прекрасно работает отправка электронных писем (в Outlook) в формате HTML, назначая строку типа содержимого text / 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);
  }
}

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

MediaTypeNames.RichText;

Outlook не обнаруживает это, он возвращается к простому тексту.
Как отправить электронное письмо в расширенном текстовом формате?

Ответы [ 3 ]

9 голосов
/ 22 января 2010

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

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

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

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

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

Это не то, что вы можете сделать с помощью нескольких строк кода в .NET.

1 голос
/ 15 мая 2014

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

var body = AlternateView.CreateAlternateViewFromString(bodyHtml, new System.Net.Mime.ContentType("text/html"));
mailMessage.AlternateViews.Add(body);
0 голосов
/ 26 мая 2017

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

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