当我尝试从我的C#程序创建电子邮件正文时,会发生一些有趣的事情
oItem.Body = text;
oItem
是Microsoft.Office.Interop.Outlook.MailItem
而text
只是包含\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,一切都很好。
答案 0 :(得分: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示例:
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());