2008-09-25 4 views
59

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

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

Благодаря

ответ

24

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

+24

Хотя это может помочь просто закончить строку в \ r \ n, это не гарантирует, что Outlook сохраняет разрыв строки. – GaussZ 2010-06-22 15:44:54

+0

если сообщение текстовое/обычное с использованием, \ r \ n должно работать; – lwpro2 2013-04-09 04:05:13

+3

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

lwpro2 2013-04-09 04:05:28

0

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

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

0

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

1

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

23

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

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

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

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

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

Сделка требует внимания ! Опубликовано: 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, которое завершает конец каждой строки в первую позицию на следующей строке, где она не будет выстройте линию с двумя линиями с отступом. Эта стратегия была использована для некоторых newsletters.
  3. Вы можете отказаться от использования текстового формата и использовать html-формат.
158

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

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

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

+2

Замечательная работа! То же самое в Outlook 2010. – 2013-04-26 08:53:51

+3

Действительно хороший ответ. Особенно тот факт, что 3 пространства в конце стоп-прогноза хорошо знать (и не нашли во многих местах в Интернете). – Legolas 2013-05-15 15:23:20

+5

Это ответ, который должен автоматически отображаться в качестве экрана запуска при открытии Outlook. – 2013-07-19 12:34:43

0

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

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

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

10

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

0

ПОСТАНОВИЛИ В МОЕЙ ЗАЯВКИ

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

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

прогноз отображается как
YadavMahesh

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

Приветствия,
Махеш

26

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

Пример:

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

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

Смотрите также Outlook autocleaning my line breaks and screwing up my email format

0

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

0

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

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

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

0

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

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

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

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

1

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

Таким образом, решение этой проблемы заключается в использовании «текст/обычного», а не «текст/html», и нет необходимости заменить возврат символы на всех:

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

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

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

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

1

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

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

РЕЗУЛЬТАТ:

FirstLine 
SecondLine 
ThirdLine 
0

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

0

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

0

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

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

0

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

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

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

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

0

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

message.setBody(MessageBody.getMessageBodyFromText(msg)); 
BodyType type = BodyType.Text; 
message.getBody().setBodyType(type); 
Смежные вопросы