使用ASP.NET Core Minimal API和MailKit发送电子邮件

发布时间 2023-07-27 15:47:45作者: 初久的私房菜

步骤1:创建新项目

通过以下命令在终端中创建一个新的ASP.NET Core Web API项目:

dotnet new webapi -o SendingEmail
由于我们正在使用Minimal APIs,因此删除不必要的Controller文件夹和WeatherForecast类。

步骤2:定义电子邮件数据传输对象(DTO)

为了将数据从我们的API传递到邮件服务器,我们需要定义一个名为EmailDto的DTO模型。在项目目录下的Models文件夹中添加一个名为EmailDto的类,并拥有From、To、Subject和Body四个属性。

namespace SendingEmail.API.Models
{
    public class EmailDto
    {
        public string From { get; set; }
        public string To { get; set; } 
        public string Subject { get; set; } 
        public string Body { get; set; }
    }
}

步骤3:创建电子邮件服务接口

在项目根目录下的Services文件夹中,创建一个名为IEmailService的接口,只包含一个方法——SendEmailAsync(EmailDto request)。然后在Services文件夹内添加EmailService类作为IEmailService接口的实现,并引用MailKit NuGet包。下面是EmailService的实现:

using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using MimeKit.Text;

namespace SendingEmail.API.Services
{
    public class EmailService : IEmailService
    {
        private readonly IConfiguration _config;
        public EmailService(IConfiguration config)
        {
            _config = config;
        }

        public async Task SendEmailAsync(EmailDto request)
        {
            var email = new MimeMessage(); 
            email.From.Add(MailboxAddress.Parse(request.From));
            email.To.Add(MailboxAddress.Parse(request.To));
            email.Subject = request.Subject;
            email.Body = new TextPart(TextFormat.Html) {Text = request.Body};

            using var smtp = new SmtpClient();
            await smtp.ConnectAsync(_config["EmailHost"], 587, SecureSocketOptions.StartTls);
            await smtp.AuthenticateAsync(_config["EmailUsername"], _config["EmailPassword"]);
            await smtp.SendAsync(email);
            await smtp.DisconnectAsync(true);
        }
    }
}

步骤4:配置API终端点

创建一个终端点,使用电子邮件服务处理电子邮件发送请求。将HTTP POST请求映射到/email路径:

app.MapPost("/email", (EmailDto request, IEmailService emailService) =>
{
    emailService.SendEmailAsync(request);
    return Results.Ok();
});

将IEmailService接口注入到构建器服务中:

builder.Services.AddScoped<IEmailService, EmailService>();

步骤5:设置应用程序配置

在appsettings.json文件中存储电子邮件发送的应用程序设置,例如邮箱主机、用户名和密码等。以下是示例:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "EmailHost": "xxxxx",
  "EmailUsername": "xxxxxx", 
  "EmailPassword": "xxxxxx",
  "AllowedHosts": "*"
}

步骤6:使用Swagger进行测试

使用Swagger测试应用程序非常容易。在浏览器中导航到https://localhost:{yourPort}/swagger/index.html,并单击POST /email下的“尝试”按钮。以JSON格式填充您首选的电子邮件DTO属性(包含From、To、Subject和Body属性),然后单击“执行”。响应代码200和结果消息表明电子邮件已成功提交。

结论

从API发送电子邮件可以是增强用户体验的强大功能。通过本教程,您已经学会了如何使用ASP.NET Core Minimal API和MailKit发送电子邮件。祝编码愉快