0

当我尝试从我的 C# 程序创建电子邮件正文时,发生了一些有趣的事情

oItem.Body = text;

oItemis a Microsoft.Office.Interop.Outlook.MailItemandtext只是一个普通的字符串,包含\n当我这样做时,\n被翻译成\r\n. 问题是其中一些\n被翻译成\r\n\r\n我无法弄清楚为什么或何时。的内容 text来自不同的来源,但它只是一个普通的字符串,如下例所示

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

如果是这样,那么您显然让我感到难过,但是,我希望您假定的两个来源之间有些事情略有不同,并且您错过了它,等等。

但是,我可以回答第一部分,并且我会这样做:它正在替换\n\r\n标准的“非 Windows -> Windows 行结尾”转换过程。文本首先从哪里获得\n?如果从您的代码中,我建议您尝试插入Environment.NewLine而不是\n在您自己的代码中。

如果您从外部来源获取文件,我建议在将输入提供给 Outlook 元素之前预先处理输入。


字符串生成器示例:

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 回答