1、安装MailKit包
使用 MailKit,需要安装引用 MailKit,安装的方法有多种,分别如下,
1)使用Nuget界面管理器
搜索 "MailKit" 在列表中分别找到它,点击"安装"
相关文档:VS(Visual Studio)中Nuget的使用
2)使用Package Manager命令安装
PM> Install-Package MailKit
3)使用.NET CLI命令安装
> dotnet add package MailKit
2、配置SMTP服务器设置
在appsettings.json
中配置SMTP服务器的设置:
{
"SmtpSettings": {
"Server": "smtp.example.com",
"Port": 587,
"SenderName": "Your Name",
"SenderEmail": "your.email@example.com",
"Username": "your.email@example.com",
"Password": "yourpassword",
"UseSsl": true
}
}
3、创建邮件服务类
创建一个服务类来封装发送邮件的代码如下,
using MailKit.Net.Smtp;
using MimeKit;
using Microsoft.Extensions.Options;
public class SmtpSettings
{
public string Server { get; set; }
public int Port { get; set; }
public string SenderName { get; set; }
public string SenderEmail { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public bool UseSsl { get; set; }
}
public interface IEmailService
{
Task SendEmailAsync(string recipientEmail, string subject, string message);
}
public class EmailService : IEmailService
{
private readonly SmtpSettings _smtpSettings;
public EmailService(IOptions<SmtpSettings> smtpSettings)
{
_smtpSettings = smtpSettings.Value;
}
public async Task SendEmailAsync(string recipientEmail, string subject, string message)
{
var emailMessage = new MimeMessage();
emailMessage.From.Add(new MailboxAddress(_smtpSettings.SenderName, _smtpSettings.SenderEmail));
emailMessage.To.Add(new MailboxAddress("", recipientEmail));
emailMessage.Subject = subject;
var bodyBuilder = new BodyBuilder { HtmlBody = message };
emailMessage.Body = bodyBuilder.ToMessageBody();
using (var client = new SmtpClient())
{
await client.ConnectAsync(_smtpSettings.Server, _smtpSettings.Port, _smtpSettings.UseSsl);
// Note: only needed if the SMTP server requires authentication
await client.AuthenticateAsync(_smtpSettings.Username, _smtpSettings.Password);
await client.SendAsync(emailMessage);
await client.DisconnectAsync(true);
}
}
}
4、 注册邮件服务
在Startup.cs
中注册邮件服务,使其可以通过依赖注入使用,代码如下,
public void ConfigureServices(IServiceCollection services)
{
services.Configure<SmtpSettings>(Configuration.GetSection("SmtpSettings"));
services.AddTransient<IEmailService, EmailService>();
// 其他服务注册...
}
或者,在Program.cs
中,代码如下,
builder.Services.Configure<SmtpSettings>(builder.Configuration.GetSection("SmtpSettings"));
builder.Services.AddTransient<IEmailService, EmailService>();
5、使用邮件服务发送邮件
在控制器或服务中,使用IEmailService
发送邮件:
public class HomeController : Controller
{
private readonly IEmailService _emailService;
public HomeController(IEmailService emailService)
{
_emailService = emailService;
}
public async Task<IActionResult> SendTestEmail()
{
await _emailService.SendEmailAsync("recipient@example.com", "Test Subject", "<h1>This is a test email</h1>");
return Ok("Email sent successfully!");
}
}