Asp.net core 学习笔记 ( Smtp and Razor template 电子邮件和 Razor 模板 )
2017-09-22 19:37
2707 查看
refer :
https://dotnetcoretutorials.com/2017/08/20/sending-email-net-core-2-0/ https://ppolyzos.com/2016/09/09/asp-net-core-render-view-to-string/ https://github.com/aspnet/Entropy/blob/dev/samples/Mvc.RenderViewToString/RazorViewToStringRenderer.cs ( 这个很干净, 没有依赖 http request )
直接看代码
要使用 Razor 模板需要提供这 2 个 服务
Controller 注入相关服务
最后呢
上面的依赖当前的请求
如果要不依赖请求的
注入
https://dotnetcoretutorials.com/2017/08/20/sending-email-net-core-2-0/ https://ppolyzos.com/2016/09/09/asp-net-core-render-view-to-string/ https://github.com/aspnet/Entropy/blob/dev/samples/Mvc.RenderViewToString/RazorViewToStringRenderer.cs ( 这个很干净, 没有依赖 http request )
直接看代码
要使用 Razor 模板需要提供这 2 个 服务
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<ICompositeViewEngine, CompositeViewEngine>(); services.AddSingleton<IActionContextAccessor, ActionContextAccessor>(); }
Controller 注入相关服务
public class EmailController : Controller { public EmailController( IOptionsSnapshot<Configuration.Email> emailOptionsAccessor, ICompositeViewEngine compositeViewEngine, IActionContextAccessor actionContextAccessor ) { emailConfig = emailOptionsAccessor.Value; this.compositeViewEngine = compositeViewEngine; actionContext = actionContextAccessor.ActionContext; } private Configuration.Email emailConfig { get; set; } private ICompositeViewEngine compositeViewEngine { get; set; } private ActionContext actionContext { get; set; } }
最后呢
SmtpClient client = new SmtpClient { EnableSsl = emailConfig.enableSsl, Port = emailConfig.port, Host = emailConfig.host, UseDefaultCredentials = false, Credentials = new NetworkCredential(emailConfig.username, emailConfig.password) }; string body; using (StringWriter sw = new StringWriter()) { EmailTemplateViewmodel model = new EmailTemplateViewmodel { value = "dada" }; ViewData.Model = model; ViewEngineResult viewResult = compositeViewEngine.GetView( null, "~/Email/EmailTemplate.cshtml", false ); ViewContext viewContext = new ViewContext(actionContext, viewResult.View, ViewData, TempData, sw, new HtmlHelperOptions()); await viewResult.View.RenderAsync(viewContext); body = sw.GetStringBuilder().ToString(); } MailMessage mailMessage = new MailMessage { From = new MailAddress(emailConfig.from, emailConfig.displayName), Subject = "subject", Body = body, IsBodyHtml = true }; mailMessage.To.Add("hengkeat87@gmail.com"); await client.SendMailAsync(mailMessage);
上面的依赖当前的请求
如果要不依赖请求的
注入
IServiceProvider serviceProvider, ITempDataProvider tempDataProvider
private async Task<string> GenerateBodyFromTemplateAsync(string templatePath, object model) { string body; using (StringWriter sw = new StringWriter()) { // 这里渲染模板是不包含任何 http 请求的东西的, 所以模板里请不要使用 http 的东西哦 var httpContext = new DefaultHttpContext(); httpContext.RequestServices = ServiceProvider; var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); var viewData = new ViewDataDictionary(metadataProvider: new EmptyModelMetadataProvider(), modelState: new ModelStateDictionary()); viewData.Model = model; var data = new TempDataDictionary(actionContext.HttpContext, TempDataProvider); var viewResult = CompositeViewEngine.GetView(null, templatePath, false); var viewContext = new ViewContext(actionContext, viewResult.View, viewData, data, sw, new HtmlHelperOptions()); await viewResult.View.RenderAsync(viewContext); body = sw.GetStringBuilder().ToString(); } return body; }
相关文章推荐
- Asp.net core 2.0.1 Razor 的使用学习笔记(二)
- Asp.net core 2.0.1 Razor 的使用学习笔记(五)
- Asp.net core 2.0.1 Razor 的使用学习笔记(四)
- Asp.net core 2.0.1 Razor 的使用学习笔记(六)
- C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
- Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
- 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
- Asp.net core 2.0.1 Razor 的使用学习笔记(一)
- Asp.net core 2.0.1 Razor 的使用学习笔记(三)
- 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面
- ASP.NET Core 2.0系列学习笔记-应用程序修改默认端口支持外网IP访问
- Scaffolding Template on Asp.Net Core Razor Page
- asp.net core学习笔记-1
- ASP.NET Core 2 学习笔记(三)中间件
- ASP.NET Core 2 学习笔记
- StringTemplate.Net 学习笔记(9):深入了解模板组文件
- ASP.NET Core 2.0系列学习笔记-配置文件
- (8)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Ocelot网关(Api GateWay)
- asp.net mvc学习笔记1(razor,html,url辅助器,ViewData,ViewBag)
- ASP.NET Core 2 学习笔记(四)依赖注入