【问题标题】:Send email using Html template with MailKit in .net core application在 .net 核心应用程序中使用带有 MailKit 的 Html 模板发送电子邮件
【发布时间】:2017-02-27 06:03:58
【问题描述】:

我正在使用 MailKit 从 .net 核心应用程序发送一封电子邮件,它会成功发送。

但我想使用 HTML 模板在 .Net 核心中使用 MailKit 发送电子邮件。

这是当前发送带有静态正文部分的电子邮件的代码

 var emailMessage = new MimeMessage();
        if (!string.IsNullOrWhiteSpace(cc))
        {
            emailMessage.Cc.Add(new MailboxAddress(cc));
        }
        else if (!string.IsNullOrWhiteSpace(EmailUserNameCC))
        {
            emailMessage.Cc.Add(new MailboxAddress(EmailUserNameCC));
        }
        if (!string.IsNullOrWhiteSpace(EmailUserNameBCC))
        {
            emailMessage.Bcc.Add(new MailboxAddress(EmailUserNameBCC));
        }

        emailMessage.From.Add(new MailboxAddress(mailFrom));
        emailMessage.To.Add(new MailboxAddress(mailTo));
        emailMessage.Subject = subject;
        if (!string.IsNullOrWhiteSpace(replyTo))
        {
            emailMessage.InReplyTo = replyTo;
        }
        var builder = new BodyBuilder();// { TextBody = message };
        builder.HtmlBody = message;

        if (attachments != null && attachments.Count > 0)
        {
            foreach (var item in attachments)
            {
                builder.Attachments.Add(item.Key, item.Value);
            }

            builder.HtmlBody = builder.HtmlBody + " \n" + " PFA";

        }
        var multipart = new Multipart("mixed");
        multipart.Add(new TextPart("html") { Text = message });

        emailMessage.Body = builder.ToMessageBody();
        using (var client = new SmtpClient())
        {
            var credentials = new NetworkCredential
            {
                UserName = EmailUserName,
                Password = EmailPassword
            };

            if (!client.IsConnected)
            {
                client.Connect(SmtpHost, Convert.ToInt32(EmailHostPort));
                client.Authenticate(EmailUserName, EmailPassword);
            }
            client.MessageSent += c_EmailReached;

            client.Send(emailMessage);
        }

现在,我想使用 HTML 模板来替换正文部分。 那么如何在 .Net Core 中使用 HTML 模板和 MailKit 呢?

补充:

-> 使用 html 模板发送电子邮件后,特殊字符也不会显示在实际电子邮件中。对于某些特殊字符,它会显示 �。那么我该如何解决这个问题,同时显示特殊字符。

谢谢。

【问题讨论】:

标签: c# asp.net-core-mvc asp.net-core-1.0 email-templates mailkit


【解决方案1】:

您可以使用 StreamReader 读取源文件并将其分配给您的 builder.HtmlBody。

using (StreamReader SourceReader = System.IO.File.OpenText(path to your file))
{
   builder.HtmlBody = SourceReader.ReadToEnd();
}

【讨论】:

  • 我想从我的解决方案文件夹中读取 html 模板,并且还想从该 html 模板中替换一些文本,例如 > 到 "MyFirstName" 和 > 到 "MyLastName"。
  • 上面的代码会帮助你。要替换文本,您可以使用 string.Format 函数
  • 你也可以使用builder.HtmlBody = text.Replace("<<text2>>", "my text2 value");
  • 谢谢,它可以工作,但是显示特殊字符还有其他问题,我在“附加:”部分下编辑了我的问题
  • 您可能需要在 HTML 中对这些特殊字符进行实体编码,或者,如果它们在文本文件模板中,您可能需要确保您的 StreamReader 使用正确的 System.Text.Encoding .
猜你喜欢
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2016-11-03
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多