邮件发送服务

启用了邮箱地址验证(EnableUserEmailVerificationopen in new window) 后,就需要有邮件发送功能。

QuickAdmin.Net 内设计了邮件服务接口 IEmailServiceopen in new window 及抽象基类 EmailServiceopen in new window,可通过继承该抽象基类快速实现自己的邮件发送服务。

使用内置的邮件发送服务

QuickAdmin.Net 内置了一个基于 SmtpClient 实现的邮件发送服务类 SmtpClientEmailServiceopen in new window 并被默认使用。
QuickAdmin.json 文件里配置好 SMTPopen in new window 后, 即可进行邮件验证码的发送。以 QQ 邮箱为例,开通 QQ 邮箱的 SMTP 后:

{
  ...
  "SMTP": {
    "Host": "smtp.qq.com",
    "Port": 587,
    "FromEmail": "你的QQ号码@qq.com",
    "Password": "开通 SMTP 时设置的授权码"
  },
  ...
}

自行实现邮件发送服务

从 EmailService 继承并实现一下 OnSendCodeAsyncopen in new window

using QuickAdmin.Service.Auth;

public class MyEmailService : EmailService
{
  protected override async Task<IServiceResult> OnSendCodeAsync(int purpose, string email, string code)
  {
    // 当前 purpose == 1 表示正在绑定邮箱
    // email 已被前置代码检查过了,必定是一个有效的邮箱地址
    ...
    if (failed)
      return ServiceResult.Failed("xxxx"); // 注意错误消息会返回给前端,因此不要返回敏感信息
    return ServiceResult.Ok();
  }
}

...
// 在启动时注册服务(必须在调用 AddQuickAdmin 之后去注册):
builder.Services.AddSingleton(typeof(IEmailService), typeof(MyEmailService));
...

基类里的其它方法:
CheckEmailAsyncopen in new window:可重写此方法来屏蔽某些邮箱地址。
BeforeSendAsyncopen in new window:基类此方法已实现对发送间隔的控制,一分钟内只能发送一条邮件。