2008-10-29 4 views
97

Я отправляю электронное письмо с использованием инфраструктуры dotnet. Вот шаблон, который я использую, чтобы создать сообщение:Outlook autocleaning мой разрыв строки и завинчивание мой формат электронной почты

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 

Обратите внимание, как прогноз неправильно удаляет необходимые разрывы строк после имени, EECoverageAmount и т.д ...

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

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

еще некоторая информация:

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

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

+8

Хотя оба высоко upvoted ответы ниже прав, см [этот ответ] (http://stackoverflow.com/a/ 1638608/298754) для списка всех правил. – Bobson 2013-07-30 20:13:19

+1

Возможный дубликат [Как форматировать строку в письме, чтобы Outlook распечатывал разрывы строк?] (Http://stackoverflow.com/questions/136052/how-do-i-format-a-string-in- e-mail-so-outlook-will-print-the-line-breaks) – fvu 2014-05-16 13:33:44

+2

Почему эта «функция» даже существует? – chiliNUT 2016-08-25 15:07:34

ответ

85

Запуск каждой строки с 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 

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

-6

Измените прерывание линии с crlf на cr или lf.

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

+0

Я попытался изменить терминатор линии на CR. Это не сработало. Затем я попытался изменить его на LF. Это тоже не сработало. – Aheho 2008-10-29 17:36:22

+1

Сомнительный. Outlook имеет очень сомнительную функцию, которая пытается конвертировать почту с жесткими разрывами строк в поток текста. Неудивительно, что это часто ошибочно, как в этом случае. – 2008-10-29 17:43:07

4

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

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

+0

Отправить как HTML, так и открытый текст. Хорошие клиенты покажут последнее, Outlook покажет первое, все будут счастливы (кроме программиста, которому нужно больше работать). – ephemient 2008-10-29 17:34:50

+0

BTW, s/http/html/g в вашем ответе. – ephemient 2008-10-29 17:36:18

0

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

112

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

26

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

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

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

0

Поместите текст в <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> 
-1

Мой текст содержит '\ г \ п', но 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(); 
    } 
    } 
1

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

1

Расширение на 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);