2008-09-25 82 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

如果消息類型爲text \ html,則使用

lwpro2 2013-04-09 04:05:28

0

嘗試\r\c,而不是\n。編輯:我認爲@羅伯特威爾金森是正確的。 \r\n。記憶力不是以前的樣子。

0

\n很大程度上適用於我們,但Outlook有時會自動根據您的說法刪除換行符。

1

您需要發送HTML電子郵件。通過電子郵件中的<br />,您將始終保留您的換行符。

23

默認情況下,Microsoft Outlook 2002及更高版本從文本消息中刪除「額外換行符」(kb308319)。也就是說,Outlook似乎簡單地忽略了文本消息中的換行符和/或回車順序,將所有行一起運行。

如果您嘗試編寫代碼以自動生成電子郵件以供某人使用Outlook閱讀,則會導致問題。

例如,假設你要提供的信息獨立的部分每個單獨的一行,清晰,就像這樣:

交易需要注意!
PostedDate:二零零九年一月三十零日
金額:$ 12,222.06
TRANSID:8gk288g229g2kg89
郵政編碼:91543

您的Outlook收件人將看到所有一起搗爛的信息,如下所示:

交易需要注意!發佈日期: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窗口中預覽文本,該窗口會將每行的末尾包裝到下一行的第一個位置,與您的雙空格縮進線對齊。這種策略已被用於一些newsletters
  3. 您可以放棄使用純文本格式,並使用html格式。
158

我今天剛剛與此戰鬥。我們稱之爲刪除額外換行符「繼續」的行爲。一點點實驗發現以下行爲:

  • 每條消息都以continuation off開始。
  • 長度小於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會自動刪除用戶輸入的換行符。

例如,如果用戶輸入
亞達夫
馬赫什

Outlook中顯示它作爲
YadavMahesh

分辨率:我換了換行字符 「\ r \ n」 和 「\看齊」 (記得在RTF代碼「\ par」的末尾點擊空格),並且換行符被重新存儲。

乾杯,
馬赫什

26

將一個時,您可以強制Outlook中的換行符(或兩個?)只是換行(CRLF)之前製表符(\ t)。

例子:

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

如果消息是使用純文本/,\ r \ n應該工作; 如果消息類型爲text \ 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」,它工作。我在java中使用StringBuffer來追加內容。
內容打印在Outlook 2010郵件的下一行中。

1

我一直在努力滿足上述所有解決方案,因爲我在我的電子郵件庫中使用了字符串變量(來自JTextPane的純文本)和「text/html」格式的組合。

因此,解決這個問題的方法是使用「text/plain的」,而不是「text/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

訣竅是從JS使用encodeURIComponent()功能:

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及更高版本,請使用\ t \ n而不是\ r \ n。

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

在Outlook 2010中爲我添加「\ t \ r \ n」(\ t代表TAB)而不是「\ r \ n」。注意:在每行的末尾添加3個空格也會做同樣的事情,但看起來像一個編程黑客!

0

\ r \ n在將身體類型設置爲文本之前不會起作用。

message.setBody(MessageBody.getMessageBodyFromText(msg)); 
BodyType type = BodyType.Text; 
message.getBody().setBodyType(type); 
相關問題