asp.net - 在 ASP.NET MVC 中创建电子邮件模板

标签 asp.net asp.net-mvc asp.net-core html-email

我正在尝试创建电子邮件模板。我已经能够编写 Controller 代码,并在文件夹中创建了一个 .txt 文件,但是当发送邮件时,用户会以 HTML 代码的形式收到它。

Controller 代码

   public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email, 
                                            Firstname = model.Firstname, Surname = model.Surname, Gender = model.Gender};
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                string body = string.Empty;
                var root = AppDomain.CurrentDomain.BaseDirectory; using (var reader = new System.IO.StreamReader(root + @"/EmailTemplates/ConfirmAccount.txt"))
                {
                    string readFile = reader.ReadToEnd();
                    string StrContent = string.Empty;
                    StrContent = readFile;
                    //Assing the field values in the template
                    StrContent = StrContent.Replace("[Firstname]", user.Firstname);
                    StrContent = StrContent.Replace("[Surname]", user.Surname);
                    StrContent = StrContent.Replace("[Code]", callbackUrl);
                    StrContent = StrContent.Replace("[Year]", DateTime.Now.Year.ToString());
                    body = StrContent.ToString();
                }
                await UserManager.SendEmailAsync(user.Id, "Confirm Your Account", body);
 return View("DisplayEmail");
            }
            AddErrors(result);
        }

        
        return View(model);
    }

以下是.txt文件内容

<!doctype html>     
<html lang="tr">
<head>
 <meta charset="utf-8">
 </head>     
 <body>
   <p>Dear [Firstname]  [Surname],</p>
   <p>Kindly Confirm your Email by clicking the link below</p>
   <p>[Code]</p>
 </body>

输出采用 HTML 形式。

最佳答案

发送 HTML 格式电子邮件的更好方法是将您的代码放在“ConfirmAccount.htm”中

<!doctype html>     
<html lang="tr">
<head>
 <meta charset="utf-8">
 </head>     
 <body>
   <p>Dear [Firstname]  [Surname],</p>
   <p>Kindly Confirm your Email by clicking the link below</p>
   <p>[Code]</p>
 </body>

使用 System.IO.File.ReadAllText 读取 HTML 文件。获取字符串变量中的所有 HTML 代码。

string Body = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("EmailTemplates/ConfirmAccount.htm"));

将特定字符串替换为您的自定义值。

Body = Body.Replace("[Firstname]", user.Firstname);

调用 SendEmail(string Body) 函数并执行发送电子邮件的过程。 将 session 电子邮件和配置应用设置替换为您的设置。

public static void SendEmail(string Body)
        {
            MailMessage message = new MailMessage();
            message.From = new MailAddress(Session["Email"].Tostring());
            message.To.Add(ConfigurationSettings.AppSettings["RequesEmail"].ToString());
            message.Subject = "Request from " + SessionFactory.CurrentCompany.CompanyName + " to add a new supplier";
            message.IsBodyHtml = true;
            message.Body = Body;

            SmtpClient smtpClient = new SmtpClient();
            smtpClient.UseDefaultCredentials = true;

            smtpClient.Host = ConfigurationSettings.AppSettings["SMTP"].ToString();
            smtpClient.Port = Convert.ToInt32(ConfigurationSettings.AppSettings["PORT"].ToString());
            smtpClient.EnableSsl = true;
            smtpClient.Credentials = new System.Net.NetworkCredential(ConfigurationSettings.AppSettings["USERNAME"].ToString(), ConfigurationSettings.AppSettings["PASSWORD"].ToString());
            smtpClient.Send(message);
        }

您可以在message.IsBodyHtml = trueSendEmailAsyn方法中查看

关于asp.net - 在 ASP.NET MVC 中创建电子邮件模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65184964/

相关文章:

asp.net - 找不到元素 'elmah'的架构信息

jquery - 如何使这个 JQuery 工作

asp.net-mvc - 如何让我的 MVC View 、模型和模型绑定(bind)器尽可能干净?

c# - 获取特定页面类型的所有子级

c# - 如何从 Serilog 中排除特定的异常类型?

asp.net-core - 使用 asp.net core 通过 twilio 向 whatsapp 组发送消息

asp.net - .Net 转发器中 div 的 CSS

c# - 如何发送 HTML 格式的电子邮件?

asp.net-mvc - MVC 路由不处理我的目录之一

C# Newtonsoft 使用声明反序列化自定义对象?