Подтвердить что ты не робот

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

Я отправляю электронное письмо с использованием инфраструктуры 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 BodyEncoding (msg.BodyEncoding = System.Text.Encoding.UTF8)
  • msg.Body считывается из текстового файла с кодировкой UTF-8, и каждая строка заканчивается crlf.

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

4b9b3361

Ответ 1

Начните каждую строку с 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

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

Ответ 2

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

Ответ 3

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

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

FYI: Я использую Outlook 2007

Ответ 4

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

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

Ответ 5

Расширение ответа Doug L, так как я считаю, что обмен сообщениями HTML еще более вездесущ и принят сейчас, чем в 2008 году, когда этот ответ был опубликован. Вот небольшой фрагмент С#, который поможет преобразовать тело и отправить сообщение в формате 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);

Ответ 6

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

Ответ 7

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

Я определил его в CSS, встроенном в HTML-тело, например:

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>

Ответ 8

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

Ответ 9

В моем тексте есть "\ 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();
     }
  }

Ответ 10

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

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