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


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

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

спасибо

27 62

27 ответов:

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

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

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

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

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

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

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

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

сделка требует внимания!
Дата публикации: 1/30/2009
Сумма: $12,222.06
TransID: 8gk288g229g2kg89
Почтовый индекс: 91543

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

сделка требует внимания! PostedDate: 1/30/2009 Сумма: $12,222.06 TransID: 8gk288g229g2kg89 индекс: 91543

кажется, нет будьте простым решением. Альтернативы:

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

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

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

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

вам нужно отправить HTML-письма. С <br />s в электронной почте, вы всегда будете иметь свои разрывы строк.

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

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

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

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

Я определил его в CSS inline в 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 автоматически удалил разрыв строки, введенный пользователем.

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

outlook отобразил его как
Ядавмахеш

: я изменил символ разрыва строки "\r\n " с "\par " ( не забудьте хит пробел в конце кода RTF "\par") и разрывы строк перестраиваются.

спасибо,
Махеш

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

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

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

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

попробовать \r\c вместо \n.

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

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

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

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

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

этой должно быть полезно для вас. попробуйте "%0A "вместо"\n". Настоящий источник -здесь.

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

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

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

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

для Outlook 2010 и более поздних версий используйте \t\n вместо использования \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>";
}

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

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

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