Как отформатировать строку в электронном письме, чтобы Outlook печатал разрывы строк?

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

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

Спасибо


person MattGrommes    schedule 25.09.2008    source источник


Ответы (27)


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

person Robert Wilkinson    schedule 25.09.2008
comment
Хотя это может помочь, простое завершение строки символом \ r \ n не гарантирует, что Outlook сохранит разрыв строки. - person GaussZ; 22.06.2010
comment
если тип сообщения - текст \ html, используйте ‹p /› - person engineer; 09.04.2013
comment
Для text / html я перепробовал все, что есть здесь ‹br›, ‹br /›, / n, / r / n .... Все еще не могу получить новую строку в моем электронном письме Outlook - person Noosphere; 19.04.2017
comment
\ t \ n у меня работает в Outlook2010. @Noosphere кажется, что у вас неправильная косая черта. - person Man Coding; 28.04.2020

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

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

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

person mtruesdell    schedule 28.10.2009
comment
Действительно хороший ответ. Особенно тот факт, что 3 места в конце обзора остановки - это хорошо знать (и их не найти во многих местах в Интернете). - person Legolas; 15.05.2013
comment
Это ответ, который должен автоматически отображаться в качестве заставки при открытии Outlook. - person Andrius Naruševičius; 19.07.2013
comment
Почему это нигде не задокументировано? Это очень полезная информация. Спасибо за исследование! - person Bobson; 31.07.2013
comment
+1 для строк, которые заканчиваются 3 или более пробелами, отключает продолжение. Это было эффективно для меня, чтобы Outlook отображал новую строку для коротких строк. - person saille; 24.01.2014
comment
Ты спас мою ночь! Большое спасибо! - person Vitalii Vitrenko; 15.03.2017
comment
Целый день потратил на то, чтобы это исправить. Спасибо. - person Angus Walker; 04.05.2017
comment
Это потрясающе - большое спасибо! \r\n не работал, но 4 пробела работали! - person gene b.; 24.04.2019

Вы можете принудительно разрыв строки в 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, автоматически очищающий мою строку ломает и портит мой формат электронной почты

person stephg    schedule 17.02.2011
comment
Большое спасибо. По вашему совету, я использую \ t + Environment.NewLine, чтобы начинать каждую новую строку. Он работает, по крайней мере, для Outlook 2013, который я использую. - person Hong; 12.02.2014

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

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

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

Транзакция требует внимания!
Дата публикации: 30.01.2009
Сумма: 12 222,06 доллара США
TransID: 8gk288g229g2kg89
PostalCode: 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.
person user60849    schedule 30.01.2009
comment
взял альтернативу 3, отказавшись от простого текста и использовав формат html с <br>. - person bob; 07.01.2021

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

person Mark    schedule 14.12.2010

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

person rashini    schedule 21.09.2014

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

person supernova    schedule 12.04.2016

Уловка состоит в том, чтобы использовать функциональность encodeURIComponent() из js:

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:[email protected]?body=" + encodeURIComponent(formattedBody);

РЕЗУЛЬТАТ:

FirstLine
SecondLine
ThirdLine
person AlCoPaine    schedule 26.09.2014

Для Outlook 2010 и более поздних версий используйте \ t \ n вместо \ r \ n.

person rkg    schedule 02.06.2015

Вам необходимо отправлять электронные письма в формате HTML. С <br />s в электронном письме у вас всегда будут разрывы строк.

person hova    schedule 25.09.2008

Если вы можете добавить "." (точка) в конце каждой строки, похоже, это предотвращает искажение форматирования текста Outlook.

person monojohnny    schedule 17.05.2011

Попробуйте \r\c вместо \n.

РЕДАКТИРОВАТЬ: Я думаю, что @Robert Wilkinson был прав. \r\n. Память уже не та, что была раньше.

person EBGreen    schedule 25.09.2008

\n в основном работает для нас, но Outlook иногда берет на себя удаление разрывов строк, как вы говорите.

person cagcowboy    schedule 25.09.2008

У меня также была эта проблема с типом обычного / текстового письма. Раньше я использовал "\ n \ n", но было два переноса строки. Затем я использовал "\ t \ n", и это сработало. Я использовал StringBuffer в java для добавления содержимого.
Содержимое было напечатано в следующей строке в почте Outlook 2010.

person thiru    schedule 26.08.2013

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

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

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/plain");
person DreamZeppelin    schedule 22.09.2013

Поместите текст в <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>
person Christian Casutt    schedule 24.09.2013
comment
Отсюда также: stackoverflow.com/a/24666437/1134961 Просто заключите в теги ‹pre› ‹/pre›. - person technocrat; 15.08.2015

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

&lt;a href=&quot;mailto:[email protected]?Subject=TEST&amp;amp;body=Hi there,%0A%0AHow are you?%0A%0AThanks&quot;&gt;email to me&lt;/a&gt;
person Lingfa    schedule 26.10.2013

У меня также была эта проблема с обычным / текстовым почтовым ящиком. У меня работал канал формы \f.

person Kumar    schedule 13.11.2014

Иногда вам нужно ввести \ r \ n дважды, чтобы outlook сделал перерыв.

Это добавит одну пустую строку, но все строки будут иметь разрыв.

person fjkjava    schedule 15.09.2015

\ r \ n не будет работать, пока вы не установите тип текста как текст.

message.setBody(MessageBody.getMessageBodyFromText(msg));
BodyType type = BodyType.Text;
message.getBody().setBodyType(type);
person vik    schedule 26.12.2016

Я столкнулся с той же проблемой, и вот код, который ее решил:

\t\n - for new line in Email service JavaMailSender

String mailMessage = JSONObject.toJSONString("Your message").replace(",", "\t\n").trim();
person Sri    schedule 11.06.2020

РАЗРЕШЕНО В МОЕЙ ЗАЯВКЕ

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

например, если пользователь ввел
Ядав
Махеш

Outlook отобразил это как
YadavMahesh

Решение. Я изменил символ разрыва строки «\ r \ n» на «\ par» (не забудьте нажать пробел в конце кода RTF «\ par»), и разрывы строк будут восстановлены.

Ура,
Махеш

person MAY    schedule 30.12.2010

Попробуй это:

message.setContent(new String(body.getBytes(), "iso-8859-1"),
                    "text/html; charset=\"iso-8859-1\"");

С уважением, Мохаммад Расул Джавид

person Mohammad Rasool Javeed    schedule 01.12.2009

У меня есть хорошее решение, которое я пробовал, просто добавьте Char (13) в конце строки, как в следующем примере:

Dim S As String
 S = "Some Text" & Chr(13)
 S = S + "Some Text" & Chr(13)
person Mohamed Selim    schedule 30.04.2012

если сообщение текстовое / обычное, \ r \ n должно работать; если тип сообщения - текст \ html, используйте < p/>

person engineer    schedule 09.04.2013

если работа должна выполняться с форматированным текстом без кодировки html. это может быть легко достигнуто с помощью следующего сценария, когда создает элемент div на лету и использует <pre></pre> html для сохранения форматирования.

var email_body = htmlEncode($("#Body").val());

 function htmlEncode(value) {
    return "<pre>" + $('<div/>').text(value).html() + "</pre>";
}
person David    schedule 22.10.2015

Не уверен, что это было упомянуто выше, но в Outlook есть параметр флажка «Удалять лишние разрывы строк в текстовых сообщениях», который установлен по умолчанию. Он расположен в другом месте для разных версий Outlook, но для 2010 перейдите на вкладку «Файл». Выберите «Параметры => Почта». Прокрутите вниз до «Формат сообщения». Снимите флажок.

person user9991046    schedule 25.06.2018