我正在尝试替换电子邮件正文中的一些文本,但每当我这样做时,似乎搞砸了签名文本的格式。例如,如果我尝试email.Body.Replace("Info", "Information")
,那么请输入以下文字:
最后一个
标题
信息
网站:www.stackoverflow.com
变成:
第一页最后一页
标题
信息
网站:HYPERLINK “http://www.stackoverflow.com/” www.stackoverflow.com
即使仅对email.Body += "text"
等文本进行简单添加,也会发生这种情况。
除此之外,它还将身体的字体从Arial 10切换到Calabri 12(这可能与Calabri 12是Arial 10是签名字体时的默认电子邮件文本有关)。
如何保存当前电子邮件正文的格式,以便在向其添加文本时,我可以将其设置回来,或者将文本添加到正文以保持格式的最佳方式是什么?
欢迎你的帮助。
答案 0 :(得分:1)
MailMessage.Body可以在RTF中格式化,我认为它默认使用,或者使用HTML格式化。您发布的最重要消息实际上是这样的:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\colortbl ;\red0\green0\blue255;}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sl240\slmult1\lang9\f0\fs22 First Last \par
Title \par
\par
Info \par
Website: {\field{\*\fldinst{HYPERLINK "www.stackoverflow.com"}}{\fldrslt{\ul\cf1 www.stackoverflow.com}}}\f0\fs22\par
}
我假设将“text”附加到结尾会导致RTF消息被不正确地解析,导致格式化丢失。
http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.body.aspx
答案 1 :(得分:0)
所以,我最终做的是使用email.HTMLBody。我创建了一个类似于HTML已有的段落块。这是块:(我的HTML不是很好,所以...很多,如果是复制/粘贴一些编辑)
<p class=MsoNormal>
<b>
<span style='font-size:10.0pt;font-family:"Arial","sans-serif"'>Replace Text
</span>
</b>
</p>
我把它设置为一个字符串,比如htmlPar,然后做一个替换:
string htmlReplace = htmlPar.Replace("Replace Text", myNewText");
这将创建一个段落块,我可以使用我的文本添加到HTML中。要将它实际添加到HTMLBody的末尾,我会像这样执行string.Replace:
string temp = email.HTMLBody.Replace("</body></html>", htmlReplace + "</body></html>");
email.HTMLBody = temp;
有了这个,我就可以在电子邮件的其余部分保留格式。就像我说的那样,我的HTML并不是很好,所以我不确定这是否可以在一般情况下添加文本或者实际上这样做的方法有多好。
无论哪种方式,我希望这可以帮助其他人。