Как отправить письмо в формате Richtext в Outlook?
Он прекрасно работает для отправки электронных писем (в 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);
}
}
Электронная почта правильно распознается как HTML в Outlook (2003).
Но если я попробую форматированный текст:
MediaTypeNames.RichText;
Outlook не обнаруживает это, он возвращается к простому тексту.
Как отправить электронное письмо в расширенном текстовом формате?
3 ответа
Суть в том, что вы не можете сделать это легко с помощью System.Net.Mail.
Форматированный текст в Outlook отправляется в виде файла winmail.dat в мире SMTP (за пределами Exchange).
Файл winmail.dat является сообщением TNEF. Итак, вам нужно будет создать свой rich text внутри файла winmail.dat (отформатированный по правилам TNEF).
Однако это еще не все. Outlook использует специальную версию сжатого RTF, поэтому вам также необходимо сжать RTF, прежде чем он будет добавлен в файл winmail.dat.
Суть в том, что это трудно сделать, и если клиент действительно не нуждается в этой функциональности, я бы переосмыслил ее.
Это не то, что вы можете сделать с помощью нескольких строк кода в.NET.
Это сработало для меня..
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)
{
}
}
Вы также можете добиться этого, добавив другое альтернативное представление перед представлением календаря, как показано ниже:
var body = AlternateView.CreateAlternateViewFromString(bodyHtml, new System.Net.Mime.ContentType("text/html"));
mailMessage.AlternateViews.Add(body);