Прогноз autocleaning мои разрывы строк и испортил мой электронный формат
Я отправляю электронное письмо с помощью платформы 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: 0,000
Reason for Request: New Hire
Name of Voluntary Employee: Ronald Weasley Total Coverage Applied For: 0,000 Guaranteed Coverage Portion: 0,000.00 Amount Subject to Medical Evident: 0,000
обратите внимание, как Outlook неправильно удаляет необходимые разрывы строк после имени, EECoverageAmount и т. д...
это важно для получателей электронной почты, чтобы получить правильно форматированная электронная почта, и я должен предположить, что некоторые из них используют outlook 2003. Я также не могу предположить, что они будут знать достаточно, чтобы отключить функцию autoclean, чтобы получить сообщение для правильного форматирования.
Я просмотрел эти сообщения в других почтовых клиентах, и они отображаются правильно
дополнительная информация:
- я использую UTF-8 BodyEncoding (msg.BodyEncoding = Система.Текст.Кодирование.В utf8)
- msg.Тело считывается из кодированного UTF-8 текстовый файл, и каждая строка заканчивается crlf.
вопрос:
Как изменить формат сообщения, чтобы избежать этой проблемы?
10 ответов:
начните каждую строку с 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.
- перейти к инструментам - > "параметры ..."
- на вкладке" Настройки "нажмите на кнопку" Параметры электронной почты ..."
- снимите флажок "удалять дополнительные переносы строк в текстовых сообщениях."
- жмем ОК
FYI:я использую Outlook 2007
Мне всегда лучше удавалось форматировать электронные письма как html. У вас все еще может быть проблема с конечным пользователем, чтобы установить клиент, чтобы разрешить формат html, но они, как правило, более знакомы с этим, так как так много электронных писем приходят в формате html. У вас также есть немного больше работы на вашем конце, добавляя теги html, но конечный результат гораздо более управляемый.
@ephemient также предлагает: отправить как HTML и открытый текст. Хороших клиентов будет показывать последний, Outlook будет показывать во-первых, все довольны (кроме программиста, который должен делать больше работы).
расширения Даг Л ответ, так как я думаю, что 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-теле, например:
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>
мой текст включает '\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(); } }
измените окончание линии с crlf на cr или lf.
Я подозреваю, что в верхней части электронной почты используется только cr (или lf), и Outlook ожидает, что остальная часть электронной почты будет следовать тому же формату.
Comments