Outlook автоматически очищает мои разрывы строк и портит мой формат электронной почты - PullRequest
105 голосов
/ 29 октября 2008

Я отправляю электронное письмо, используя платформу dotnet. Вот шаблон, который я использую для создания сообщения:

Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%

Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For:  %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%

Когда сообщения получены в outlook, outlook сообщает мне: «В этом сообщении были удалены дополнительные разрывы строк». И сообщение выглядит так:

Date of Hire: 9/28/2001
Annual Salary: $100,000
Reason for Request: New Hire

Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For:  $500,000 Guaranteed Coverage Portion: $300,000.00 Amount Subject to Medical Evident: $200,000

Обратите внимание, как Outlook некорректно удаляет необходимые разрывы строк после имени, EECoverageAmount и т. Д ...

Для получателей электронной почты важно правильно отформатировать электронную почту, и я должен предположить, что некоторые из них используют outlook 2003. Я также не могу предположить, что они будут знать достаточно, чтобы отключить функцию автоочистки, чтобы получить сообщение для форматирования должным образом.

Я просматривал эти сообщения в других почтовых клиентах, и они отображаются правильно

дополнительная информация:

  • Я использую кодирование BodyEncoding UTF-8 (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • Сообщение msg.Body читается из текстового файла в кодировке UTF-8, и каждая строка заканчивается символом crlf.

Вопрос: Как мне изменить формат сообщения, чтобы избежать этой проблемы?

Ответы [ 11 ]

122 голосов
/ 12 января 2009

Вы также можете вставить символ табуляции в конце строки (непосредственно перед CR LF). Этот дополнительный пробел будет в конце строки и, следовательно, невидим для пользователя. Вы могли бы предпочесть это, чтобы вставить пробелы слева. Обратите внимание, что одного пробела недостаточно (хотя, возможно, несколько пробелов помогут, я не знаю.)

92 голосов
/ 29 октября 2008

Начинайте каждую строку с 2 пробелов, и внешний вид будет "обманным путем" для сохранения вашего форматирования.

Итак, измени

Date of Hire: %HireDate%
Annual Salary: %AnnualIncome%
Reason for Request: %ReasonForRequest%

Name of Voluntary Employee: %FirstName% %LastName%
Total Coverage Applied For:  %EECoverageAmount%
Guaranteed Coverage Portion: %GICoveragePortion%
Amount Subject to Medical Evident: %GIOverage%

до

  Date of Hire: %HireDate%
  Annual Salary: %AnnualIncome%
  Reason for Request: %ReasonForRequest%

  Name of Voluntary Employee: %FirstName% %LastName%
  Total Coverage Applied For:  %EECoverageAmount%
  Guaranteed Coverage Portion: %GICoveragePortion%
  Amount Subject to Medical Evident: %GIOverage%
^^ <--- Two extra spaces at the start of every line

Вот статья , которую я нашел, исследуя эту проблему, которая углубляется в немного больше, чем мой ответ.

27 голосов
/ 31 августа 2009

Этот ответ о том, как «отключить» эту функцию в клиенте Outlook.

  • Перейти в Инструменты -> "Параметры ..."
  • На вкладке «Настройки» нажмите «Параметры электронной почты ...»
  • Снимите флажок «Удалить лишние разрывы строк в текстовых сообщениях».
  • Хит ОК

К вашему сведению: я использую Outlook 2007

4 голосов
/ 29 октября 2008

У меня всегда была удача при форматировании электронных писем в формате html. У конечного пользователя может возникнуть проблема с настройкой клиентом разрешения на формат html, но они обычно знакомы с этим, поскольку многие электронные письма приходят в формате html. У вас также есть немного больше работы по добавлению html-тегов, но конечный результат гораздо более управляем.

@ ephemient также предлагает: Отправить как HTML, так и в виде открытого текста. Хорошие клиенты покажут последнее, Outlook покажет первое, все довольны (кроме программиста, который должен делать больше работы).

2 голосов
/ 12 апреля 2016

Добавление "\ t \ r \ n" (\ t для TAB) вместо "\ r \ n" работало для меня в Outlook 2010.

1 голос
/ 17 августа 2017

Расширение ответа Doug L , поскольку я думаю, что обмен сообщениями в формате HTML стал еще более распространенным и принятым сейчас, чем в 2008 году, когда этот ответ был опубликован. Вот небольшой фрагмент кода c #, который поможет преобразовать тело и отправить сообщение в формате HTML:

body = string.Format("<font face='calibri,arial,sans-serif'>{0}<font/>", body.Replace("\r\n", "<br>"));

using (var smtpClient = new SmtpClient() { Host = smtpHost })
using (var msg = new MailMessage(from, emailDistribution, subject, body) { IsBodyHtml = true })
     smtpClient.Send(msg);
0 голосов
/ 15 марта 2019

Автоматическая очистка - это функция внешнего вида, которая удаляет лишние разрывы строк. Вы можете предотвратить это двумя способами.

  • Первый способ - добавить как минимум 2 лишних пробела перед строками при отправке электронного письма через код. Вы можете добавить эти дополнительные пробелы только перед теми строками, которые outlook автоматически удаляет.

  • Второй способ - изменить настройку перспективы, которая будет препятствовать прогнозу от удаления лишних разрывов строк.

enter image description here

enter image description here

0 голосов
/ 13 ноября 2014

Мой текст содержит '\ r \ n', но Outlook 2010 не отображает разрыв строки. Создайте токены строк, разделенных символами '\ r \ n', и маркеры конвертов тегами абзаца HTML. Формат моей электронной почты - HTML. Я генерирую тело HTML для своей электронной почты в коде ниже.

string[] tokens = Regex.Split(objTickt.Description, "\r\n");
  if (tokens.Length > 0)
  {
     foreach (string line in tokens)
     {
         //htmlTW.WriteEncodedText(objTickt.Description.Replace("\r\n", "\n\n"));
         htmlTW.RenderBeginTag(HtmlTextWriterTag.P);
         htmlTW.WriteEncodedText(line);
         htmlTW.RenderEndTag();
     }
  }
0 голосов
/ 24 сентября 2013

Поместите текст в <pre> Теги и внешний вид будут правильно форматировать и отображать текст.

Я определил это в CSS, встроенном в HTML Body, как:

CSS:

pre {
 font-family: Verdana, Geneva, sans-serif;
}

Я определил семейство шрифтов для набора шрифтов.

HTML:

<code><td width="70%"><pre>Entry Date/Time:       2013-09-19 17:06:25
Entered By:     Chris

worklog mania

____________________________________________________________________________________________________

Entry Date/Time:        2013-09-19 17:05:42
Entered By:     Chris

this is a new Worklog Entry
0 голосов
/ 13 ноября 2008

Я вижу ту же проблему, когда генерирую электронное письмо, а затем читаю его с помощью Outlook 2003 с пакетом обновления 3 (SP3). Похоже, что вы можете избежать процесса удаления, сохранив длину строки до 40 символов. Может не всегда быть практичным.

...