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

StackOverflow https://stackoverflow.com/questions/136052

Вопрос

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

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

Спасибо

Это было полезно?

Решение

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

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

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

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

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

Вы можете вызвать разрыв строки в Outlook, прикрепив один (или два?) символа табуляции ( ) непосредственно перед разрывом строки (CRLF).

Пример:

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

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

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

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

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

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

Сделка требует внимания!
Дата публикации:30.01.2009
Количество:$12 222,06
ТрансИД:8гк288г229г2кг89
Почтовый индекс:91543

Получатель Outlook увидит всю информацию в одном виде, а именно:

Сделка требует внимания!Дата публикации:30.01.2009 Сумма:$12 222,06 Трансидентификатор:8gk288g229g2kg89 Почтовый индекс:91543

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

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

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

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

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

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

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

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

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

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

я определил это в 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>

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

&lt;a href=&quot;mailto:someone@gmail.com?Subject=TEST&amp;amp;body=Hi there,%0A%0AHow are you?%0A%0AThanks&quot;&gt;email to me&lt;/a&gt;

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

var formattedBody = "FirstLine \n Second Line \n Third Line";
var mailToLink = "mailto:x@y.com?body=" + encodeURIComponent(formattedBody);

РЕЗУЛЬТАТ:

FirstLine
SecondLine
ThirdLine

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

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

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

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

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

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

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

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

Ваше здоровье,
Махеш

Если вы можете добавить в '.' (DOT) символ В конце каждой строки это, по -видимому, предотвращает форматирование текста, разрушающего Outlook.

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

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

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

Пытаться \r\c вместо \n.

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

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

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

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

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

Этот должно быть полезно для вас.попробуйте «%0A» ​​вместо « ».Настоящий источник здесь.

Вам нужно добавить «%0A» ​​везде, где вам понадобится новая строка в вашем коде.В твоем случае

 abcParameters.put(defConstants.REPORT_MESSAGE, "Invalid file sent by tt. Hence ffgghh  was unable
              to process it : " + s+ "%0A" +e.getMessage().toString());

У меня также была проблема с типом обычной/текстовой почты.Раньше я использовал « », но было два разрыва строки.Затем я использовал « », и это сработало.я использовал StringBuffer в Java для добавления контента.
Содержимое было напечатано в следующей строке в почте Outlook 2010.

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

Иногда вам нужно дважды ввести , чтобы заставить Outlook сделать перерыв.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top