使用ASP.NET Core Minimal API和MailKit发送电子邮件
步骤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发送电子邮件。祝编码愉快