Outlook автоматически очищает мои разрывы строк и изменяет формат моей электронной почты

StackOverflow https://stackoverflow.com/questions/247546

  •  05-07-2019
  •  | 
  •  

Вопрос

Я отправляю электронное письмо, используя платформу 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.Я также не могу предположить, что они будут знать достаточно, чтобы отключить функцию автоматической очистки, чтобы сообщение было правильно отформатировано.

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

еще немного информации:

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

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

Это было полезно?

Решение

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

Так что меняйся

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

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

Другие советы

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

Этот ответ посвящен тому, как "отключить" эту функцию в клиенте Outlook.

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

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

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

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

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

Расширяя информацию о Дуг Л ответ, поскольку я думаю, что обмен сообщениями в формате 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);

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

Поместите текст в <pre> Теги и Outlook правильно отформатируют и отобразят текст.

я определил это в CSS inline в HTML Body следующим образом:

CSS - файл:

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

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

HTML:

<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</pre></td>

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

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

  • Второй способ заключается в изменении настроек Outlook, которые не позволят Outlook удалять дополнительные разрывы строк.

enter image description here

enter image description here

Мой текст содержит ' \ n', но Outlook 2010 не отображает разрыв строки.Создайте маркеры строк, разделенных символом ' ', и маркеры конвертов с помощью тегов 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();
     }
  }

Измените окончание вашей линии с crlf на cr или lf.

Я подозреваю, что в верхней части письма используется только cr (или lf), и Outlook ожидает, что остальная часть письма будет соответствовать тому же формату.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top