2

電子メールの本文の一部のテキストを置き換えようとしていますが、置き換えるたびに署名テキストのフォーマットが台無しになっているようです。たとえば、試してみるとemail.Body.Replace("Info", "Information")、次のテキストが表示されます。

最初の最後の
タイトル

情報
ウェブサイト:www.stackoverflow.com

になる:

最初の最後の
タイトル

情報
ウェブサイト:HYPERLINK " http://www.stackoverflow.com/ " www.stackoverflow.com

これは、のようなテキストへの単純な追加でも発生しますemail.Body += "text"

これに加えて、本文のフォントをArial10からCalabri12に切り替えます(これは、Arial10が署名フォントである場合のデフォルトの電子メールテキストであるCalabri12と関係がある可能性があります)。

現在の電子メール本文の形式を保存して、テキストを追加するときに元に戻すことができるようにするにはどうすればよいですか、または書式を維持するために本文にテキストを追加するための最良の方法は何ですか?

あなたの助けを歓迎します。

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 temp = email.HTMLBody.Replace("</body></html>", htmlReplace + "</body></html>");
email.HTMLBody = temp;

これにより、残りの電子メールのフォーマットを維持することができました。私が言ったように、私のHTMLは素晴らしいものではないので、これが一般的にテキストを追加するのに役立つかどうか、またはこの方法でそれを行うメソッドが実際にどれほど優れているかはわかりません。

いずれにせよ、これが将来の誰かを助けることができることを願っています。

于 2013-02-26T23:05:03.543 に答える