2

我正在尝试替换电子邮件正文中的一些文本,但每当我这样做时,似乎都会搞砸签名文本的格式。例如,如果我尝试email.Body.Replace("Info", "Information")然后这个文本:

首尾
标题

信息
网站:www.stackoverflow.com

变成:

首尾
标题

信息
网站:HYPERLINK“ http://www.stackoverflow.com/ ”www.stackoverflow.com

即使只是简单地添加到文本中也会发生这种情况,例如email.Body += "text".

除此之外,它还将正文的字体从 Arial 10 切换到 Calabri 12(这可能与在 Arial 10 是签名字体时 Calabri 12 是默认的电子邮件文本有关)。

如何保存当前电子邮件正文的格式,以便在向其中添加文本时可以将其设置回来,或者将文本添加到正文以保持格式的最佳方法是什么?

欢迎您的帮助。

4

2 回答 2

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
}

我假设在末尾附加“文本”会导致 RTF 消息被不正确地解析,从而导致格式丢失。

http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.body.aspx

于 2013-02-26T20:27:38.363 回答
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 不是很好,所以我不确定这是否可以添加一般的文本,或者这样做的方法实际上有多好。

无论哪种方式,我希望这可以帮助其他人。

于 2013-02-26T23:05:03.543 回答