2

次のコードが未加工の Html で電子メールを送信している理由を誰か教えてもらえますか? ページのソースを表示すると、電子メールは次のように表示されます。

添付ファイルとアドレスからのコードを含めないようにコードを切り詰めました。

代替ビューで行を無効にすると、電子メールは正しく表示されますが、プレーン テキスト バージョンも送信したいと考えています。

using (SmtpClient client = GetSmtpClient(settings)) {
    using (MailMessage message = new MailMessage()) {
        message.IsBodyHtml = true;
        message.BodyEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");
        message.To.Add(toList);
        message.Subject = subject;
        message.Body = htmlTemplate;
        message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(textTemplate, new ContentType("text/plain")));
        client.Send(message);
     }
}

編集:メッセージはもともと本文としてテキストを送信し、代替ビューとしてhtmlを送信していましたが、ここで説明されているようにアクセント付きの文字と外国語の文字で問題が発生し、trueに設定したかったためIsBodyHtml、htmlをメインビューに設定する必要がありました.

4

2 に答える 2

2

これにも問題がありましたが、これは私のために働いたコードの非常に削減されたバージョンです...

   private MailMessage CreateEmailMessage(string emailAddress) {

        MailMessage msg = new MailMessage();

        msg.From = new MailAddress(FromEmailAddress, FromName);
        msg.To.Add(new MailAddress(emailAddress));
        msg.Subject = "Msg Subject here";

        string textBody = File.ReadAllText(TextTemplateFile);


        string htmlBody = "";
        if (EmailFormat == "html") {
            htmlBody = File.ReadAllText(HtmlTemplateFile);

            foreach (Attachment inline in InlineAttachments) {
                inline.ContentDisposition.Inline = true;
                msg.Attachments.Add(inline);
            }

            AlternateView alternateHtml = AlternateView.CreateAlternateViewFromString(htmlBody,
                                                                                      new ContentType("text/html"));
            msg.AlternateViews.Add(alternateHtml);

            AlternateView alternateText = AlternateView.CreateAlternateViewFromString(textBody,
                                                                                      new ContentType("text/plain"));
            msg.AlternateViews.Add(alternateText);

        }
        else {
            msg.Body = textBody;
        }

        return msg;
    }
于 2012-11-08T11:26:00.363 に答える
1

結局、メソッドに渡される「htmlTemplate」文字列がcharset=ISO-8859-1電子メールの先頭で定義されているため、コードで行っていた変更をオーバーライドしていることに気付きました。

文字セットをに変更しUTF-8、コードを次のように復元しました。

using (SmtpClient client = GetSmtpClient(settings)) {
  using (MailMessage message = new MailMessage()) {
    message.To.Add(toList);
    message.Subject = subject;
    message.Body = textTemplate;          
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(htmlTemplate, new ContentType("text/html")));
    client.Send(message);
  }
}

テキストとHTMLの両方のテンプレートを送信できるようになり、アクセント付き文字の問題をカバーできるようになりました。

于 2012-11-08T14:22:24.293 に答える