Как отформатировать строку в электронном письме, чтобы Outlook печатал разрывы строк? - PullRequest
66 голосов
/ 26 сентября 2008

Я пытаюсь отправить электронное письмо на Java, но когда я читаю основную часть письма в Outlook, оно избавляется от всех моих разрывов строк. Я ставлю \ n на концах строк, но есть ли что-то особенное, что мне нужно сделать, кроме этого? Получатели всегда будут использовать Outlook.

Я нашел страницу на microsoft.com, на которой написано, что в Outlook есть функция «Удалить разрывы строк», так значит ли это, что нет другого решения, кроме как отменить проверку этого параметра?

Спасибо

Ответы [ 27 ]

177 голосов
/ 28 октября 2009

Я только что боролся с этим сегодня. Давайте назовем поведение удаления лишних разрывов строк «продолжением». Небольшой эксперимент обнаружит следующее поведение:

  • Каждое сообщение начинается с продолжения.
  • Строки длиной менее 40 символов не вызывают продолжения, но если продолжение включено, им удаляют разрывы строк.
  • Строки 40 символов или более включают продолжение. Он остается включенным до тех пор, пока не произойдет событие для его отключения.
  • Строки, оканчивающиеся точкой, вопросительным знаком, восклицательным знаком или двоеточием, отключают продолжение. (Outlook предполагает, что это конец предложения?)
  • Строки, которые выключают продолжение, начнутся с разрыва строки, но включат продолжение снова, если они длиннее 40 символов.
  • Строки, начинающиеся или заканчивающиеся табуляцией, отключают продолжение.
  • Строки, начинающиеся с 2 или более пробелов, отключают продолжение.
  • Строки, заканчивающиеся 3 или более пробелами, выключают продолжение.

Обратите внимание, что я пробовал все это в Outlook 2007. YMMV.
Поэтому, если это возможно, завершите все пункты маркера пунктуацией, заканчивающей предложение, знаком табуляции или даже тремя пробелами.

26 голосов
/ 17 февраля 2011

Вы можете принудительно разрывать строку в outlook при добавлении одного (или двух?) Символов табуляции (\ t) непосредственно перед разрывом строки (CRLF).

Пример:

This is my heading in the mail\t\n
Just here Outlook is forced to begin a new line.

Кажется, он работает в Outlook 2010. Проверьте, работает ли это в других версиях.

См. Также Outlook автоматически очищает мои разрывы строк и испортил мой формат электронной почты

25 голосов
/ 26 сентября 2008

Вам нужно использовать \r\n в качестве решения.

23 голосов
/ 31 января 2009

Microsoft Outlook 2002 и выше удаляет «дополнительные разрывы строк» ​​из текстовых сообщений по умолчанию (kb308319) . То есть Outlook, похоже, просто игнорирует последовательности перевода строки и / или возврата каретки в текстовых сообщениях, выполняя все строки вместе.

Это может вызвать проблемы, если вы пытаетесь написать код, который автоматически сгенерирует сообщение электронной почты, которое будет прочитано кем-то с помощью Outlook.

Например, предположим, что для ясности вы хотите предоставить отдельные фрагменты информации в каждой строке, например:

Транзакция требует внимания!
Дата публикации: 30.01.2009
Сумма: 12 222,06 доллара США
TransID: 8gk288g229g2kg89
Индекс: 91543

Ваш получатель Outlook увидит всю информацию, собранную вместе, следующим образом:

Сделка требует внимания! Дата публикации: 30.01.2009 Сумма: 12 222,06 $ TransID: 8gk288g229g2kg89 ZipCode: 91543

Кажется, нет простого решения. Альтернативы:

  1. Вы можете указать два набора разрывов строк между каждой строкой. Это мешает Outlook объединить строки в одну строку, но затем отображает дополнительную пустую строку между каждой строкой (создавая противоположную проблему). Под «поставкой двух наборов разрывов строк» ​​я имею в виду, что вы должны использовать «\ r \ n \ r \ n» или «\ r \ r» или «\ n \ n», но не «\ r \ n» или «\ n». \ г».
  2. Вы можете поставить два пробела в начале каждой строки в теле вашего сообщения электронной почты. Это позволяет избежать введения дополнительной пустой строки между каждой строкой. Но это работает лучше всего, если каждая строка в вашем сообщении довольно короткая, потому что пользователь может предварительно просматривать текст в очень узком окне Outlook, которое переносит конец каждой строки на первую позицию на следующей строке, где это не будет выровняйте свои строки с двумя пробелами. Эта стратегия использовалась для некоторых новостных рассылок .
  3. Вы можете отказаться от использования простого текстового формата и использовать формат html.
11 голосов
/ 14 декабря 2010

У меня была такая же проблема, и я нашел решение. Попробуйте это: %0D%0A, чтобы добавить разрыв строки.

3 голосов
/ 21 сентября 2014

Я использовал разрыв строки html вместо "\ n". Работало нормально.

2 голосов
/ 12 апреля 2016

Добавление «\ t \ r \ n» (\ t для TAB) вместо «\ r \ n» работало для меня в Outlook 2010. Примечание: добавление 3 пробелов в конце каждой строки также делает то же самое, но это похоже на программирование!

1 голос
/ 26 октября 2013

Поскольку это запрос, работает только процент экранированных символов, что означает, что% 0A дает вам разрыв строки. Например,

<a href="mailto:someone@gmail.com?Subject=TEST&body=Hi there,%0A%0AHow are you?%0A%0AThanks">email to me</a>
1 голос
/ 22 сентября 2013

Я боролся со всеми вышеупомянутыми решениями, и здесь ничего не помогло, потому что я использовал строковую переменную (простой текст из JTextPane) в сочетании с форматированием "text / html" в моей библиотеке электронной почты.

Итак, решение этой проблемы заключается в использовании «text / plain» вместо «text / html» и вообще не нужно заменять возвращаемые символы:

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/plain");
1 голос
/ 24 сентября 2013

Поместите текст в <pre> Теги и внешний вид будут правильно форматировать и отображать текст.

Я определил это в CSS, встроенном в HTML Body, как:

CSS:

pre {
 font-family: Verdana, Geneva, sans-serif;
}

Я определил семейство шрифтов для набора шрифтов.

HTML:

<code><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
...