.NET Core使用FluentEmail发送邮件的示例代码(2)

//构建附件 var stream = new MemoryStream(); var sw = new StreamWriter(stream); sw.WriteLine("您好,这是文本里的内容"); sw.Flush(); stream.Seek(0, SeekOrigin.Begin); //附件1 var attachment = new FluentEmail.Core.Models.Attachment { Data = stream, ContentType = "text/plain", Filename = "Hello.txt" }; //附件2 var attachment2 = new FluentEmail.Core.Models.Attachment { Data = File.OpenRead(@"D:\test.txt"), ContentType = "text/plain", Filename = "test.txt" }; //添加附件 email.Attach(new List<FluentEmail.Core.Models.Attachment> { attachment, attachment2 }); var result = email.Send();

使用Razor模板

上面的内容我们介绍了使用FluentEmail使用常规的方式发送邮件,但是有时候我们需要发送一些内容是动态的或者发送一些样式比较复杂html网页内容。通常我们使用原生的SmptClient的时候都是通过拼接html代码方式,但是这种方式相对来说比较费时费力,对于.Net程序员来说Razor引擎是我们构建动态html页面最熟悉的方式,而FluentEmail正是为我们提供了Razor模板的支持。首先,我们在之前的基础上引入FluentEmail.Razor模板支持组件

<PackageReference Include="FluentEmail.Razor" Version="2.8.0" />

由于ASP.NET Core2.2开始默认是使用的视图编译功能,视图会编译成 项目名称.Views.dll,但是FluentEmail.Razor又需要读取视图文件的内容,所以要在csproj文件中添加以下内容

<MvcRazorExcludeRefAssembliesFromPublish>true</MvcRazorExcludeRefAssembliesFromPublish>

然后我们就可以使用Razor模板生成邮件内容,具体的使用方式

//声明使用razor的方式 Email.DefaultRenderer = new RazorRenderer(); //razor内容 var template = "你好@Model.Name先生, 请核实您的电话号码是否为@Model.Phone"; var email = Email .From("lisi@126.com") .To("zhangsan@qq.com") .Subject("手机号核实") //传递自定义POCO类 //.UsingTemplate<UserInfo>(template, new UserInfo { Name = "张三", Phone吗 = "100110119120" }) //或传递匿名对象 .UsingTemplate(template, new { Name = "张三", Phone吗 = "100110119120" }); var result = await email.SendAsync();

当然它支持的方式不仅仅只是Razor字符串,还可以传递Razor视图文件

var email = Email .From("lisi@126.com") .To("zhangsan@qq.com") .Subject("手机号核实") //传递自定义POCO类 //.UsingTemplateFromFile<UserInfo>($"{Directory.GetCurrentDirectory()}/template.cshtml", // new UserInfo { Name = "张三", Phone吗 = "100110119120" }); //第一个参数为视图文件位置,第二个参数为模型对象 .UsingTemplateFromFile($"{Directory.GetCurrentDirectory()}/template.cshtml", new { Name = "张三", Phone吗 = "100110119120" }); var result = await email.SendAsync();

FluentEmail.Razor之所以能够支持强大的Razor模板引擎,主要是得益于它内部集成了RazorLight,这是一款非常强大的Razor引擎,可以将Razor模板字符串或者Razor视图文件解析成具体的字符串结果,具体详情可参阅RazorLight官方GitHub地址https://github.com/toddams/RazorLight,目前正式版并不支持.Net Core,可以选择下载beta版本

Install-Package RazorLight -Version 2.0.0-beta10

它的使用方式也非常简单

//razor字符串的方式 var engine = new RazorLightEngineBuilder() .UseEmbeddedResourcesProject(typeof(Program)) .UseMemoryCachingProvider() .Build(); string template = "Hello, @Model.Name. Welcome to RazorLight repository"; ViewModel model = new ViewModel {Name = "John Doe"}; //result就是解析后的字符串 string result = await engine.CompileRenderStringAsync("templateKey", template, model);

或使用razor视图文件的方式

var engine = new RazorLightEngineBuilder() .UseFileSystemProject("${Directory.GetCurrentDirectory()}") .UseMemoryCachingProvider() .Build(); var model = new {Name = "John Doe"}; string result = await engine.CompileRenderAsync("template.cshtml", model);

当然它支持的方式不仅仅只有这两种,无论是使用便捷程度还是功能上都非常的强大,有兴趣的同学可以自行查阅RazorLight的GitHub地址,讲解的还是非常详细的。在这里就不在过多的讨论关于RazorLight的使用方式了。

关于发送的邮件内容,这里有一个非常重要的点需要友情提示一下公共邮箱运营商比如网易或腾讯,有的可能需要手动开启SMTP服务,具体如何设置可以参考https://www.jb51.net/diannaojichu/520949.html一文。还有一点也比较重要如果你使用公共邮箱运营商的邮箱那么他们会对邮件的标题和内容限制比较大,可能出现的问题比较多,而且开启Smtp服务需要发送短信认证才能开启。好在大部分公司都有自己的邮件系统,在实际发送邮件的过程中可能不会存在这么多的问题。

结合依赖注入使用

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8d6d5176b34a8d8c7d4945baa7fdc8e6.html