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 (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 удалять дополнительные разрывы строк.
Мой текст содержит ' \ 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 ожидает, что остальная часть письма будет соответствовать тому же формату.