简介
iemailsender
ismtpemailsender
nullemailsender
配置
集成 mailkit
安装
集成
用法
定制
简介
发送邮件是一个很常用的任务,几乎每个应用都需要。abp提供了一个基本的框架,用于简单地发送邮件并为它分离出了邮件服务的配置。
iemailsender
它是一个你无需了解它的细节就能简单地用来发送邮件的服务,用法如下所示:
public class taskmanager : idomainservice {private readonly iemailsender _emailsender; public taskmanager(iemailsender emailsender) { _emailsender = emailsender; }public void assign(task task, person person) {//assign task to the persontask.assignedto = person;//send a notification email _emailsender.send( to: person.emailaddress, subject: you have a new task!, body: $a new task is assigned for you: <b>{task.title}</b>, isbodyhtml: true);} }
我们简单地注入iemailsender,并使用send方法,该方法有几个重载版本,其中也有能接受mailmessage对象的重载(.net core里不能用,因为.net core不包含smtpclient和mailmessage)。
ismtpemailsender
同样也有一个ismtpemailsender,它扩展了iemailsender,添加了buildclient方法,用来创建一个smtpclient,然后可以直接使用smtpclient(.net core里不能用,因为.net core不包含smtpclient和mailmessage)。大部分情况下使用ismtpemailsender就已足够。
nullemailsender
nullemailsender是iemailsender 的null对象设计模式的实现,可用在单元测试和属性依赖注入中。
配置
邮件发送使用了设置管理系统来读取邮件发送的配置,所有设置的名称都以常量的形式定义在abp.net.mail.emailsettingnames类里。下列是它的值和描述:
abp.net.mail.defaultfromaddress:默认的邮件发送者的地址(如上面的示例)。
abp.net.mail.defaultfromdisplayname:默认的邮件发送者显示的名称(如上面的示例)。
abp.net.mail.smtp.host: smtp服务器的ip或域名(默认为127.0.0.1)。
abp.net.mail.smtp.port: smtp服务器的端口(默认为25)。
abp.net.mail.smtp.username: 当smtp服务器要求认证时,需要提供的用户名。
abp.net.mail.smtp.password: 当smtp服务器要求认证时,需要提供的密码。
abp.net.mail.smtp.domain: 当smtp服务器要求认证时,需要提供的域名。
abp.net.mail.smtp.enablessl: 表明一个smtp服务器是(true)否(false)需要使用ssl连接(默认为false)。
abp.net.mail.smtp.usedefaultcredentials: 为true时使用默认的凭证代替提供的用户和密码(默认为true)。
集成 mailkit
由于.net core不支持标准的system.net.mail.smtpclient,所以我们需要第三方供应商来发送邮件,幸运地是,mailkit 是默认的smtpclient的一个很好的代替,而且微软也建议使用它。
abp.mailkit 包优雅地集成到了abp的邮件发送系统里,所以,你仍可像前面的方式通过mailkit使用iemailsender。
安装
首先,安装abp.mailkit 包到你的项目:
install-package abp.mailkit
集成
添加abpmailkitmodule 依赖到你的模块:
[dependson(typeof(abpmailkitmodule))]public class myprojectmodule : abpmodule {//...}
用法
你可以像前面描述的那样使用iemailsender,因为abp.mailkit包为它注册了mailkit的实现。也使用上面定义的配置。
定制
在创建mailkit的smtpclient时,你可能会有额外的配置或自己的定制,此时,你可以用你自己的实现替换imailkitsmtpbuilder 接口的注册,不过可以通过继承defaultmailkitsmtpbuilder 更简单。比如,你想为所有的ssl连接提供一个凭证,这种情况下,你可以重写configureclient方法,如下所示:
public class mymailkitsmtpbuilder : defaultmailkitsmtpbuilder{public mymailkitsmtpbuilder(ismtpemailsenderconfiguration smtpemailsenderconfiguration) : base(smtpemailsenderconfiguration) { }protected override void configureclient(smtpclient client) {client.servercertificatevalidationcallback = (sender, certificate, chain, errors) => true; base.configureclient(client); } }
然后在你的模块的preinitialize方法中用你上面的实现替换imailkitstmpbuilder接口的实现:
[dependson(typeof(abpmailkitmodule))]public class myprojectmodule : abpmodule {public override void preinitialize() { configuration.replaceservice<imailkitsmtpbuilder, mymailkitsmtpbuilder>();}//...}
(记得添加using abp.configuration.startup;声明,因为replaceservice 的扩展方法定义在这个命名空间里)。
以上就是.net是怎么发送邮件的?的详细内容。
