Я отправляю электронное письмо, используя структуру 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.
Вопрос: Как изменить формат сообщения, чтобы избежать этой проблемы?
\r\n
. У меня это сработало.Ответы:
Начинайте каждую строку с двух пробелов, и Outlook будет "обманут" в сохранении вашего форматирования.
Так что измени
в
Вот статья, которую я нашел, исследуя эту проблему, которая немного глубже, чем мой ответ.
источник
Regex.Replace(messageBody, @"^(?!\s\s)", " ", RegexOptions.Multiline);
Вы также можете вставить символ табуляции в конце строки (непосредственно перед CR LF). Этот дополнительный пробел будет в конце строки и, следовательно, не будет виден пользователю. Вы могли бы предпочесть вставку пробелов слева. Обратите внимание, что одного пробела недостаточно (хотя, возможно, поможет несколько пробелов, я не знаю).
источник
Regex.Replace(messageBody, @"(?<!\t)((?<!\r)(?=\n)|(?=\r\n))", "\t", RegexOptions.Multiline)
Это ответ о том, как «отключить» эту функцию в Outlook Client.
К вашему сведению: я использую Outlook 2007
источник
Мне всегда больше удавалось форматировать электронные письма как html. У вас все еще может быть проблема конечного пользователя, связанная с тем, что клиент должен разрешать формат html, но они обычно более знакомы с этим, поскольку многие электронные письма приходят в формате html. У вас также есть немного больше работы над добавлением тегов html, но конечный результат гораздо более контролируем.
@ephemient также предлагает: Отправлять как в формате HTML, так и в виде обычного текста. Хорошие клиенты покажут второе, Outlook покажет первое, все довольны (кроме программиста, которому нужно больше работать).
источник
Добавление «\ t \ r \ n» (\ t для TAB) вместо «\ r \ n» сработало для меня в Outlook 2010.
источник
"\r\n "
(два пробела, без табуляции) после новой строки, как подобный прием. Работает в Outlook 2016. YMMV.Расширяя ответ Дуга Л. , я считаю, что обмен сообщениями в формате HTML стал еще более распространенным и принятым сейчас, чем в 2008 году, когда был опубликован этот ответ. Вот небольшой фрагмент кода C #, который поможет преобразовать тело и отправить сообщение в формате HTML:
источник
Я наблюдаю ту же проблему при создании электронного письма с открытым текстом и последующем его чтении с помощью Outlook 2003 SP3. Похоже, вы можете избежать процесса удаления, сохранив длину строки менее 40 символов. Не всегда может быть практичным.
источник
Поместите текст в
<pre>
теги, и Outlook будет правильно форматировать и отображать текст.Я определил его в CSS inline в HTML Body, например:
CSS:
Я определил семейство шрифтов, которое нужно установить.
HTML:
источник
Автоматическая очистка - это функция Outlook, которая удаляет лишние разрывы строк. Вы можете предотвратить это двумя способами.
Первый способ - добавить как минимум 2 дополнительных пробела перед строками при отправке электронного письма с помощью кода. Вы можете добавить эти лишние пробелы только перед теми строками, которые автоматически удаляются Outlook.
Второй способ - изменить настройку Outlook, которая не позволит Outlook удалять лишние разрывы строк.
источник
Мой текст включает '\ r \ n', но Outlook 2010 не отображает разрыв строки. Создайте токены строк, разделенных '\ r \ n', и токены конверта с помощью тегов HTML Paragraph. Мой формат электронной почты - HTML. Я создаю тело HTML для своей электронной почты в приведенном ниже коде.
источник
Измените завершение строки с crlf на cr или lf.
Я подозреваю, что в верхней части письма используется только cr (или lf), а Outlook ожидает, что остальная часть письма будет следовать тому же формату.
источник