1.工具
NETCore.MailKit包
VS2022
2.过程
1)创建项目api
引用NETCore.MailKit包
2)设置appsettings
"EmailOptions": {
"SenderName": "系统邮件", //发送者名称,可在代码中重新替换
"FromAddress": "xxxxxx@163.com", //发件者邮箱
"ToAddress": "xxxx@qq.com", //接收人邮箱
"Host": "smtp.163.com", //主机
"Port": 465, //端口 阿里云默认25端口不开放,需要使用SSL的465端口
"UserName": "xxxxx@163.com", //发件邮箱账号
"Password": "xxxxxx" //发件邮箱授权码(授权码是用于登录第三方邮件客户端的专用密码)
}
3)获取163的授权码
登录-进入设置-开启(IMAP/SMTP服务、POP3/SMTP服务)-这个时候就有 了授权码
4)初始化
using NETCore.MailKit.Extensions;
using NETCore.MailKit.Infrastructure.Internal;
using Service.Dto;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.Configure<EmailOptions>(builder.Configuration.GetSection("EmailOptions"));
builder.Services.AddMailKit(optionBuilder =>
{
optionBuilder.UseMailKit(new MailKitOptions()
{
//get options from sercets.json
Server = builder.Configuration.GetValue<string>("EmailOptions:Host"),
Port = builder.Configuration.GetValue<int>("EmailOptions:Port"),
SenderName = builder.Configuration.GetValue<string>("EmailOptions:SenderName"),
SenderEmail = builder.Configuration.GetValue<string>("EmailOptions:FromAddress"),
// can be optional with no authentication
Account = builder.Configuration.GetValue<string>("EmailOptions:UserName"),
Password = builder.Configuration.GetValue<string>("EmailOptions:Password"),
// enable ssl or tls
Security = true
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseAuthorization();
app.MapControllers();
app.Run();
5)创建类
/// <summary>
/// 配置文件Dto
/// </summary>
public class EmailOptions
{
public string FromAddress { get; set; }
public string ToAddress { get; set; }
public string Host { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
6)api调用
private readonly EmailOptions options;
private readonly IEmailService _EmailService;
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger, IOptions<EmailOptions> options, IEmailService emailService)
{
_logger = logger;
this.options = options.Value;
_EmailService = emailService;
}
[HttpGet]
public async Task<IEnumerable<WeatherForecast>> Get()
{
//设置发送人的邮件地址和名称,在接收人接收到邮件提示时会显示该信息
var sendInfo = new SenderInfo
{
SenderEmail = options.FromAddress,
SenderName = "发送者名称",
};
await _EmailService.SendAsync(options.ToAddress, "标题名", "邮件内容", false, sender: sendInfo);
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
7)接收成功
8)源码: