web-dev-qa-db-ja.com

Outlookで改行が印刷されるように、電子メールの文字列をフォーマットするにはどうすればよいですか?

Javaでメールを送信しようとしていますが、Outlookでメールの本文を読むと、改行がすべて削除されます。\ nを最後に追加しています行ですが、それ以外に特別なことが必要ですか?受信者は常にOutlookを使用しています。

Outlookに「改行を削除する」「機能」があるというMicrosoft.comのページを見つけたので、その設定をオフにする以外に解決策がないということですか?

ありがとう

67
MattGrommes

ソリューションとして\r\nを使用する必要があります。

26

私は今日これと戦っています。余分な改行を削除する動作を「継続」と呼びましょう。少し実験すると、次の動作が見つかります。

  • すべてのメッセージは継続をオフにして始まります。
  • 40文字未満の行は継続をトリガーしませんが、継続がオンの場合、改行が削除されます。
  • 40文字以上の行は継続をオンにします。イベントが発生してオフになるまでオンのままです。
  • ピリオド、疑問符、感嘆符、またはコロンで終わる行は、継続をオフにします。 (Outlookは文の終わりだと想定していますか?)
  • 継続をオフにする行は改行で始まりますが、40文字より長い場合は継続をオンに戻します。
  • タブで開始または終了する行は継続をオフにします。
  • 2つ以上のスペースで始まる行は継続をオフにします。
  • 3つ以上のスペースで終わる行は継続をオフにします。

これらすべてをOutlook 2007で試したことに注意してください。YMMV。
したがって、可能であれば、すべての箇条書き項目を文末の句読点、タブ、または3つのスペースで終了してください。

179
mtruesdell

改行(CRLF)の直前に1つ(または2つ)のタブ文字(\ t)を添付すると、Outlookで強制的に改行することができます。

例:

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

Outlook 2010で動作するようです。これが他のバージョンで動作するかどうかをテストしてください。

Outlookが改行を自動クリーニングし、電子メール形式を台無しにする も参照してください

26
stephg

Microsoft Outlook 2002以降では、デフォルトでテキストメッセージから「余分な改行」が削除されます (kb308319) 。つまり、Outlookはテキストメッセージ内の改行やキャリッジリターンシーケンスを単に無視し、すべての行をまとめて実行しているように見えます。

これは、Outlookを使用しているユーザーが読むための電子メールメッセージを自動的に生成するコードを作成しようとする場合に問題を引き起こす可能性があります。

たとえば、次のように、明確にするために、別々の行に個別の情報を提供するとします。

トランザクションには注意が必要です!
投稿日:1/30/2009
金額:12,222.06ドル
TransID:8gk288g229g2kg89
郵便番号:91543

Outlookの受信者には、次のようにすべての情報が破壊されて表示されます。

トランザクションには注意が必要です!投稿日:1/30/2009金額:$ 12,222.06 TransID:8gk288g229g2kg89 ZipCode:91543

簡単な解決策はないようです。代替手段は次のとおりです。

  1. twoの各行間に改行を設定できます。これにより、Outlookは行を1行に結合できなくなりますが、各行の間に余分な空白行が表示されます(反対の問題が発生します)。 「2組の改行を指定する」ことで、「\ r\n\r\n」または「\ r\r」または「\ n\n」を使用する必要がありますが、「\ r\n」または「\ n\r "。
  2. 電子メールメッセージの本文の各行の先頭に2つのスペースを指定できます。これにより、各行の間に余分な空白行が挿入されなくなります。しかし、これは、メッセージの各行がかなり短い場合に最適です。ユーザーが各行の終わりを次の行の最初の位置に折り返す非常に狭いOutlookウィンドウでテキストをプレビューしている可能性があるためです2つのスペースでインデントされた行と整列します。この戦略は、いくつかの newsletters で使用されています。
  3. プレーンテキスト形式の使用をgiveめ、html形式を使用できます。
23
user60849

私は同じ問題を抱えていて、解決策を見つけました。これを試して: %0D%0A改行を追加します。

11
Mark

"\ n"の代わりにhtml改行を使用しました。うまくいきました。

4
rashini

Outlook 2010では、「\ r\n」の代わりに「\ t\r\n」(TABの場合は\ t)を追加するとうまくいきました。注:各行の最後に3つのスペースを追加しても同じことが行われますが、これはプログラミングハックのように見えます。

2
supernova

私は上記のすべてのソリューションに苦労していましたが、ここでは何の助けもありませんでした。これは、文字列変数(JTextPaneのプレーンテキスト)を電子メールライブラリの "text/html"フォーマットと組み合わせて使用​​したためです。

したがって、この問題の解決策は、「text/html」の代わりに「text/plain」を使用することであり、戻り文字をまったく置き換える必要はありません。

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

これはクエリであるため、エスケープされたパーセント文字のみが機能します。つまり、%0Aは改行を提供します。例えば、

<a href="mailto:[email protected]?Subject=TEST&body=Hi there,%0A%0AHow are you?%0A%0AThanks">email to me</a>
1
Lingfa

テキストを<pre>タグに入れると、Outlookはテキストを正しくフォーマットして表示します。

hTML BodyのCSSインラインで次のように定義しました。

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

Outlook 2010以降のバージョンでは、\ r\nではなく\ t\nを使用します。

1
rkg

\ r\nは、本文タイプをテキストとして設定するまで機能しません。

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

トリックは、jsのencodeURIComponent()機能を使用することです。

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

結果:

FirstLine
SecondLine
ThirdLine
1
AlCoPaine

HTMLメールを送信する必要があります。 <br />sをメールで送信すると、常に改行が入ります。

1
hova

この問題はプレーン/テキストメールタイプでも発生しました。フォームフィード\f私のために働いた。

0
Abhinav

これ は役に立つはずです。 「\ n」の代わりに「%0A」を試してください。実際のソースは こちら です

コードに新しい行が必要な場合は、「%0A」を追加する必要があります。あなたの場合

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

メッセージがtext/plain usingの場合、\ r\nは機能するはずです。メッセージタイプがtext\htmlの場合、< p/>を使用します

0
lwpro2

\r\c の代わりに \n

編集: @Robert Wilkinsonが正しかったと思う。 \r\n。メモリは、以前のようにはなりません。

0
EBGreen

\n主に機能しますが、Outlookは、あなたが言うように、改行を削除するためにそれ自体を使用することがあります。

0
cagcowboy

htmlエンコーディングを使用せずにフォーマットされたテキストで作業を行う必要がある場合。 その場でdiv要素を作成する<pre></pre>書式設定を維持するためのhtml要素。

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

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

これを試して:

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

よろしく、モハマド・ラソール・ジェイブド

私のアプリケーションで解決済み

私のアプリケーションでは、ユーザーがテキスト領域にメッセージ本文を入力したメールを送信しようとしました。メールが送信されると、Outlookはユーザーが入力した改行を自動的に削除しました。

例:ユーザーが入力した場合
ヤダブ
マヘシュ

Outlookはそれを次のように表示しました
ヤダブマヘシュ

解決策:改行文字 "\ r\n"を "\ par"に変更しました(RTF code "\ par")および改行は再描画されます。

乾杯、
マヘシュ

0
Mahesh Yadav

「。」を追加できる場合(ドット)各行の最後の文字、これはOutlookがテキストの書式設定を台無しにするのを防ぐようです。

0
monojohnny

私はそれを試してみましたが、次の例のように行の最後にChar(13)を追加するだけです。

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

また、プレーン/テキストメールタイプでこの問題が発生しました。以前、「\ n\n」を使用しましたが、2つの改行がありました。次に、「\ t\n」を使用しましたが、うまくいきました。コンテンツを追加するためにJavaでStringBufferを使用していました。
Outlook 2010メールの次の行にコンテンツが印刷されました。

0
thiru

Outlookに強制的にブレークさせるために、\ r\nを2回入力する必要がある場合があります。

これにより、空の行が1行追加されますが、すべての行に改行が含まれます。

0
fjkjava