首先你可以创建控制器扩展方法:
public static partial class ControllerExtensions
{
public static string RenderPartialViewToString(this ControllerBase controller, string partialPath, object model)
{
if (string.IsNullOrEmpty(partialPath))
partialPath = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialPath);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
// copy model state items to the html helper
foreach (var item in viewContext.Controller.ViewData.ModelState)
if (!viewContext.ViewData.ModelState.Keys.Contains(item.Key))
{
viewContext.ViewData.ModelState.Add(item);
}
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
然后,创建一个接收 SenderEmail 接收器电子邮件的控制器操作方法。然后创建模板变量
var template= this.RenderPartialViewToString("MailToSend", model);
这会将 View MailToSend 转换为字符串。
之后,您可以使用 MailMessage 类发送电子邮件:
SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com"; //if your email is gmail
client.Port = 25;
client.UseDefaultCredentials = false;
client.Credentials = smtpCrede;
client.EnableSsl = true;
MailMessage message = new MailMessage();
message.From = new MailAddress(here goes email");
message.To.Add(new MailAddress(email));
message.IsBodyHtml = true;
message.Body = template;
client.Send(message);
return true;
并声明:
private NetworkCredential smtpCrede = new NetworkCredential("your email, "your email password");
动作方法之外。