C # возникли проблемы при отправке электронной почты с ** текстовым ** и ** HTML ** контентом - PullRequest
0 голосов
/ 13 сентября 2018

У меня проблемы с отправкой электронной почты с содержанием в виде обычного текста & HTML . В Outlook 2007 сообщение в виде простого текста никогда не отображается. А в почтовом клиенте Gmail по умолчанию отображается обычный текст . Мне нужно, чтобы сообщение HTML отображалось по умолчанию как в Outlook, так и в Gmail, но пользователь может переключиться на обычный текст, если такие настройки установлены в этой системе.

Я использую следующий код C # для отправки писем:

    private void SendEmail(string server, string from, string userName, string password, int port , string recipients)
{

    MailMessage message = new MailMessage(from,recipients);
    message.Subject = "This email message has multiple views.";
    message.From = new MailAddress(from);
    message.To.Add(recipients);
    message.IsBodyHtml = false;
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("<html><head></head><body><h1>This is some HTML text2</h1></body></html>", null, MediaTypeNames.Text.Html));
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("This is some plain text2", null, MediaTypeNames.Text.Plain));

    SmtpClient client = new SmtpClient(server);
    client.Port = port;
    NetworkCredential SMTPUserInfo = new NetworkCredential(userName, password);
    client.UseDefaultCredentials = false;
    client.Credentials = SMTPUserInfo;
    client.Send(message);
}

Проблема с этим кодом заключается в том, что (я не уверен), что в Outlook 2007 содержимое электронной почты первоначально отображается, как показано на рисунке ниже (по умолчанию текст HTML отображается как обычный текст):

enter image description here

Когда я щелкаю правой кнопкой мыши и выбираю «Отображать как HTML», содержимое электронной почты отображается следующим образом (отображение тела HTML):

enter image description here

И когда я использую gmail.com для просмотра электронной почты, содержимое электронной почты отображается следующим образом (по умолчанию отображается обычный текст):

enter image description here

РЕДАКТИРОВАТЬ 1: Как и предполагалось, я внес изменения в свой код, теперь я могу видеть содержимое электронной почты в формате HTML в Gmail . Но в Outlook 2007 после установки обычного текста в качестве представления по умолчанию я вижу теги HTML в виде строки, и он не показывает простой текст, который я набросал, что немного отличается от HTML. Кроме того, как я проверяю текстовое электронное письмо в Gmail, так как теперь в Gmail я получаю только HTML-представление, и я не нашел способа увидеть текстовое представление, хотя я нажал на вид оригинала и изменил вид = ом, чтобы посмотреть = дом в URL, как я читал его в Google где-то.

private void SendEmail(string server, string from, string userName, string password, int port , string recipients)
{

    MailMessage message = new MailMessage(from,recipients);
    message.Subject = "This email message has multiple views.";
    message.From = new MailAddress(from);
    message.To.Add(recipients);
    message.Body = "This is some plain text2";
    message.IsBodyHtml = true;
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("<html><head></head><body><h1>This is some HTML text2</h1></body></html>", null, MediaTypeNames.Text.Html));
    //message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("This is some plain text2", null, MediaTypeNames.Text.Plain));

    SmtpClient client = new SmtpClient(server);
    client.Port = port;
    NetworkCredential SMTPUserInfo = new NetworkCredential(userName, password);
    client.UseDefaultCredentials = false;
    client.Credentials = SMTPUserInfo;
    client.Send(message);
}

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Я бы попробовал добавить представление html после представления в виде простого текста.

Кроме того, я обычно устанавливаю флаг IsBodyHtml в значение true, даже когда у меня определены оба представления.

0 голосов
/ 13 сентября 2018

Вы должны установить MailMessage.Body для открытого текста. Затем добавьте HTML-текст, как вы делаете через AlternateViews. По крайней мере, так я всегда отправлял электронные письма как с текстом, так и с HTML. Почтовый клиент должен автоматически выбирать html, если он способен это показать. Он не должен отображать «Альтернативный вид», как сейчас.

Редактировать

Я бы не установил для IsBodyHtml значение true, это может привести к путанице в почтовой программе, так как это обычный текст.

Также я бы установил Encoding на Encoding.UTF8, но сомневаюсь, что это решит эту проблему.

Edit2

Только что проверил код моего почтового отправителя. Я всегда устанавливаю заголовок 'id сообщения', не знаю, имеет ли это значение:

 mailMessage.Headers.Add("message-id", "<" + DateTime.Now.Ticks + "@example.com>");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...