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