0

C# プログラムからメール本文を作成しようとすると、おかしなことが起こります

oItem.Body = text;

oItemこれを行うと、はMicrosoft.Office.Interop.Outlook.MailItemに変換されtextます。問題は、一部が翻訳されてしまい、その理由や時期が分からないことです。のコンテンツは さまざまなソースから取得されますが、以下の例のように、単なる通常の文字列です。\n\n\r\n\n\r\n\r\ntext

text: "Zusammenfassung:\nText0\nText1 \n\nText2\nText3\nText4 {...} TextX\n 

oItem.Body: "Zusammenfassung: \r\nText0 \r\nText1 \r\n\r\nText2\r\n\r\nText3\r\n\r\nText4 {...} TextX\r\n 

そこで何が起こっているのですか?私は完全に混乱しています。

編集: 文字列が += で構築されると、二重の改行が作成されます

string lineToSend = "bla Bla: " + Sig + " bla bla " + string.Join(", ", usedCnt.toCntName());
if (refCnts.Count() != 0)
{

    lineToSend += "some Text";
}
else 
{
    lineToSend += " some other Text";
}

//lineToSend = "dummyStringLine";
messageObj.setMessageLines(lineToSend);

dummyStringLine を使用すれば、すべて問題ありません。

4

1 に答える 1

0

場所がどこにあるかを簡単に説明するために...これが完全に重複していると確信していますか?

"Zusammenfassung:\nText0\nText1 \n\nText2\nText3\nText4 {...} TextX\n 
                 ^1     ^2      ^3^4     ^5     ^6                 ^7
"Zusammenfassung: \r\nText0 \r\nText1 \r\n\r\nText2\r\n\r\nText3\r\n\r\nText4 {...} TextX\r\n 
                 ^1        ^2         ^3  ^4       ^5           ^6                       ^7

もしそうなら、あなたは明らかに私を困惑させましたが、あなたが想定していた2つの情報源の間でいくつかのことがわずかに異なっていて、あなたがそれを見逃していたなどのことを期待しています.

しかし、私は最初の部分に答えることができます。そうするつもりです。これは、標準の「非 Windows -> Windows 行末」変換プロセスに置き換え\nています。そもそも\r\nテキストはどこから取得していますか?\nあなたのコードからの場合は、自分のコードではEnvironment.NewLineなく挿入してみることをお勧めします\n

外部ソースからファイルを取得する場合は、Outlook 要素に渡す前に入力を事前にスクラブすることをお勧めします。


StringBuilder の例:

StringBuilder sb = new StringBuilder();

sb.AppendLine("Zusammenfassung:").AppendLine( text0 ).AppendLine( text1 ).AppendLine( Environment.NewLine );
sb.AppendLine( text2 );
sb.Append( text3 ).Append( Environment.NewLine );
//I'm sure you get the idea here

oItem.Body = sb.ToString();

これを行うことで同じエラーが発生するかどうかを確認してください...ちょっとしたリファクタリングだと思いますが、メソッドの一部をダミーにして高速化することはできますか?


あなたのコードを使用して...

StringBuilder sb = new StringBuilder("bla Bla: ");

sb.Append( Sig ).Append( " bla bla " ).Append( string.Join(", ", usedCnt.toCntName()) );
if (refCnts.Count() != 0)
{

    sb.Append( "some Text" );
}
else 
{
    sb.Append( " some other Text" );
}

//lineToSend = "dummyStringLine";
messageObj.setMessageLines(sb.ToString());
于 2012-12-12T15:57:05.603 に答える