Как отформатировать строку в сообщении электронной почты, чтобы Outlook печатал разрывы строк?
Я пытаюсь отправить по электронной почте в Java, но когда я читаю текст письма в Outlook, он отбросил все переносы строк. Я ставлю n в конце строк, но есть ли что-то особенное, что мне нужно сделать, кроме этого? Приемники всегда будут использовать Outlook.
Я нашел страницу на microsoft.com это говорит о том, что в Outlook есть "функция удаления разрывов строк", поэтому это означает, что нет никакого решения, чтобы обойти это, кроме отмены проверки установка?
спасибо
27 ответов:
Я просто боролся с этим сегодня. Назовем поведение удаления лишних разрывов строк "продолжением"."Небольшое экспериментирование обнаруживает следующее поведение:
- каждое сообщение начинается с продолжения выкл.
- строки длиной менее 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
кажется, нет будьте простым решением. Альтернативы:
- вы можете поставить два наборы разрывов строк между каждой строкой. Это останавливает Outlook от объединения строк в одну строку, но затем отображает дополнительную пустую строку между каждой строкой (создавая противоположную проблему). Под " поставкой двух наборов разрывов строк "я имею в виду, что вы должны использовать" \r\n\r\n "или" \r\r "или" \n\n", но не" \r\n "или"\n\r".
- вы можете поставить два пробела в начале каждой строки в теле Вашего сообщения электронной почты. Это позволяет избежать введения дополнительной пустой строки между каждой строкой. Но это работает лучше всего, если каждая строка в вашем сообщении довольно короткая, потому что пользователь может просматривать текст в очень узком окне Outlook, которое обертывает конец каждой строки до первой позиции на следующей строке, где он не будет соответствовать вашим двум строкам с отступом. Эта стратегия была использована для некоторых рассылки.
- вы можете отказаться от использования обычного текста форматирование и использование формата html.
добавление " \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 дает вам разрыв строки. Например,
<a href="mailto:someone@gmail.com?Subject=TEST&amp;body=Hi there,%0A%0AHow are you?%0A%0AThanks">email to me</a>
фокус в том, чтобы использовать
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.
иногда вам нужно ввести \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 перейдите на вкладку "Файл". Выберите "Параметры = > Почта "прокрутите вниз до" формат сообщения " снимите флажок.