Як відформатувати рядок в електронному листі, щоб Outlook надрукував розриви рядків?


76

Я намагаюся надіслати електронне повідомлення на Java, але коли я прочитав основне повідомлення електронної пошти в Outlook, воно позбулося всіх моїх розривів. Я ставлю \ n в кінці рядків, але чи є щось особливе, що мені потрібно зробити крім цього? Приймачі завжди будуть використовувати Outlook.

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

Дякую

Відповіді:


29

Потрібно використовувати \r\nяк розчин.


25
Хоча це може допомогти просто закінчити рядок у \ r \ n, не гарантує, що Outlook зберігає розрив рядка.
GaussZ

5
якщо тип повідомлення - текстовий \ html, використовуйте <p />
lwpro2

Що стосується тексту / html, я спробував все, що було там, <br />, / n, / r / n .... Досі не можу отримати новий рядок у своєму електронному листі з прогнозом
Noosphere

1
\ t \ n працює для мене в Outlook2010. @Nossphere здається, у вас неправильна коса риса.
Man Coding

195

Я щойно з цим боровся. Назвемо поведінку видалення зайвих розривів рядків "продовженням". Трохи експериментуючи виявляє таку поведінку:

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

Зверніть увагу, що я спробував все це з Outlook 2007. YMMV.
Тож, якщо це можливо, закінчте всі пункти маркера розділовим знаком, що закінчує речення, табуляцією або навіть трьома пробілами.


5
Дійсно хороша відповідь. Особливо той факт, що 3 місця в кінці зупинки корисно знати (і не зустрічаються в багатьох місцях в Інтернеті).
Леголас

5
Це відповідь, яка повинна автоматично відображатися як початковий екран при відкритті Outlook.
Andrius Naruševičius

2
Чому це ніде не задокументовано? Це дуже корисна інформація. Дякуємо за дослідження!
Бобсон

4
+1 для "Рядки, які закінчуються 3 або більше пробілами, вимикають продовження." Це було ефективно для мене з метою забезпечення того, щоб Outlook відображав новий рядок для коротких рядків.
saille

Ти врятував мою ніч! Дуже дякую!
Віталій Вітренко

29

Ви можете примусити розрив рядка в перспективі, коли прикріплюєте один (або два?) Символів табуляції (\ 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, який я використовую.
Гонг

24

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

Це може спричинити проблеми, якщо ви намагаєтеся написати код, який автоматично генерує повідомлення електронної пошти, яке читатиме хтось із Outlook.

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

Транзакція потребує уваги!
ОпублікованоДата: 30.01.2009
Сума: $ 12 222,06 $
TransID: 8gk288g229g2kg89 Поштовий індекс
: 91543

Одержувач Outlook побачить всю інформацію, зібрану разом, наступним чином:

Транзакція потребує уваги! ОпублікованоДата: 30.01.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.

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

10

У мене була та сама проблема, і я знайшов рішення. Спробуйте це: %0D%0Aдодати розрив рядка.


4

Я використав розрив рядка html замість "\ n". Це спрацювало нормально.


4

Додавання "\ t \ r \ n" (\ t для TAB) замість "\ r \ n" працювало для мене в Outlook 2010. Примітка: додавання 3 пробілів в кінці кожного рядка також робить те саме, але це виглядає як злом програмування!


2

Фокус полягає у використанні encodeURIComponent()функціоналу від js:

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

РЕЗУЛЬТАТ:

FirstLine
SecondLine
ThirdLine

1

Для Outlook 2010 та пізніших версій використовуйте \ t \ n, а не \ r \ n.


0

Вам потрібно надсилати електронні листи у форматі HTML. Якщо <br />в електронному листі є s, ви завжди матимете розриви рядків.


0

Якщо ви можете додати символ "." (крапка) в кінці кожного рядка, здається, це не дозволяє програмі Outlook зіпсувати форматування тексту.


0

Спробуйте \r\cзамість \n.

РЕДАГУВАТИ: Я думаю, що у @Robert Wilkinson це було правильно. \r\n. Пам'ять просто не те, що було раніше.


0

В \nосновному це працює для нас, але Outlook іноді бере на себе завдання видаляти розриви рядків, як ви говорите.


0

У мене також виникла ця проблема з простим / текстовим видом пошти. Раніше я використовував "\ n \ n", але було два розриви рядка. Потім я використав "\ t \ n", і це спрацювало. Я використовував StringBufferjava для додавання вмісту.
Вміст надруковано в наступному рядку в пошті Outlook 2010.


0

Я боровся з усіма наведеними вище рішеннями, і тут мені нічого не допомогло, тому що я використав змінну String (звичайний текст з JTextPane) у поєднанні з форматуванням "text / html" у своїй бібліотеці електронної пошти.

Отже, вирішення цієї проблеми полягає у використанні "text / plain", замість "text / html", і взагалі не потрібно замінювати символи повернення:

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

0

Помістіть текст у <pre>теги, і програма Outlook відформатує та відобразить текст правильно.

я визначив це в CSS вбудовано в 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>.
технократ

0

Оскільки це запит, працюють лише відсотки екранованих символів, це означає, що% 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;

0

У мене також виникла ця проблема із звичайним / текстовим типом пошти. Форма стрічки \fпрацювала для мене.


0

Іноді доводиться вводити \ r \ n двічі, щоб змусити outlook зробити перерву.

Це додасть один порожній рядок, але всі рядки матимуть розрив.


0

\ r \ n не працюватиме, поки ви не встановите тип тексту як текст.

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

0

Я зіткнувся з такою ж проблемою, і ось код, який її вирішив:

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

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

-1

ВИРІШЕНО В МОЄМ ЗАЯВКІ

У моїй заявці я намагався надіслати електронне повідомлення, тіло повідомлення якого користувач набрав у текстовій області. Коли електронна пошта була надіслана, Outlook автоматично видалив розрив рядка, введений користувачем.

наприклад, якщо користувач ввів
Ядав
Махеш

outlook відображав це як
ЯдавМахеш

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

Ура,
Махеш



-1

У мене є гарне рішення, яке я спробував, це просто додати Char (13) в кінці рядка, як у наступному прикладі:

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

-1

якщо повідомлення текстове / звичайне, \ r \ n має працювати; якщо тип повідомлення - text \ html, використовуйте< p/>


-1

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

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

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

-1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.