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

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

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

Спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
76
0
119 805
27
Перейти к ответу Данный вопрос помечен как решенный

Ответы 27

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

Обновлено: Я думаю, что @Robert Wilkinson был прав. \r\n. Память уже не та, что была раньше.

Ответ принят как подходящий

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

Хотя это может помочь, простое завершение строки символом \ r \ n не гарантирует, что Outlook сохранит разрыв строки.

GaussZ 22.06.2010 19:44

если тип сообщения - текст \ html, используйте <p />

lwpro2 09.04.2013 08:05

Для text / html я перепробовал все, что есть <br>, <br />, / n, / r / n .... Все еще не могу получить новую строку в моем электронном письме Outlook

Noosphere 19.04.2017 00:20

\ t \ n у меня работает в Outlook2010. @Noosphere кажется, что у вас неправильная косая черта.

Man Coding 28.04.2020 19:19

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

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

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.

взял альтернативу 3, отказавшись от простого текста и используя формат html с <br>.

bob 07.01.2021 03:06

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

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

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

Действительно хороший ответ. Особенно тот факт, что 3 пробела в конечной остановке обзора - это хорошо знать (и их нельзя найти во многих местах в Интернете).

Legolas 15.05.2013 19:23

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

Andrius Naruševičius 19.07.2013 16:34

Почему это нигде не задокументировано? Это очень полезная информация. Спасибо за исследование!

Bobson 31.07.2013 00:05

+1 за «Строки, заканчивающиеся 3 или более пробелами, отключают продолжение». Это было эффективно для меня, чтобы Outlook отображал новую строку для коротких строк.

saille 24.01.2014 04:18

Ты спас мою ночь! Большое спасибо!

Vitalii Vitrenko 15.03.2017 01:26

Весь день потратил на то, чтобы это исправить. Спасибо.

Angus Walker 04.05.2017 22:08

Это потрясающе - большое спасибо! \r\n не работает, но 4 пробела работают!

gene b. 24.04.2019 19:30

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

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

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

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

РАЗРЕШЕНО В МОЕЙ ЗАЯВЛЕНИИ

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

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

Outlook отобразил это как
ЯдавМахеш

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

Ура,
Махеш

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

Большое спасибо. По вашему совету, я использую "\ t" + Environment.NewLine, чтобы начинать каждую новую строку. Он работает, по крайней мере, для Outlook 2013, который я использую.

Hong 12.02.2014 17:59

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

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

Dim S As String
 S = "Some Text" & Chr(13)
 S = S + "Some Text" & Chr(13)

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

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

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

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

MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(message, "text/plain");

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

Отсюда тоже: stackoverflow.com/a/24666437/1134961 Просто заключите в теги <pre> </pre>.

technocrat 15.08.2015 00:00

Поскольку это запрос, работает только процент экранированных символов, что означает, что% 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;

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

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

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

РЕЗУЛЬТАТ:

FirstLine
SecondLine
ThirdLine

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

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

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

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

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

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

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

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

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

message.setBody(MessageBody.getMessageBodyFromText(msg));
BodyType type = BodyType.Text;
message.getBody().setBodyType(type);

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

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

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

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

Другие вопросы по теме