Создание шаблона электронной почты в ASP.NET MVC

#asp.net #asp.net-mvc #asp.net-core #html-email

#asp.net #asp.net-mvc #asp.net-ядро #html-электронная почта

Вопрос:

Я пытаюсь создать шаблоны электронной почты. Я смог написать коды контроллера, а также создал файл .txt в папке, но когда почта была отправлена, пользователи получают ее в виде HTML-кода.

Код контроллера

    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.

Ответ №1:

Лучший способ отправить электронное письмо в формате 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>
 

Прочитайте HTML-файл с помощью System.IO.File.Прочитайте весь текст. получить весь HTML-код в строковой переменной.

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

Замените определенную строку вашим пользовательским значением.

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

Вызовите функцию SendEmail(тело строки) и выполните процедуру для отправки электронного письма.
Замените настройки электронной почты сеанса и приложения конфигурации вашими.

 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 = true методе SendEmailAsyn

Комментарии:

1. Спасибо за ваш ответ. У меня уже есть функция отправки электронной почты. Могу ли я получить полный код для использования этого «Body = Body. Заменить(«[Firstname]», пользователь. Имя пользователя);» ?

2. Пожалуйста, обратите внимание, что я пытался использовать ConfirmAccount.htm с моим приведенным выше кодом контроллера

3. Это значение false или true?

4. Спасибо, Валид. В моем SendEmailAsync я добавил сообщение. IsBodyHtml = true, а также использовал ConfirmAccount.htm . Теперь он работает хорошо. Можете ли вы отредактировать ответ, чтобы я его принял?