Initial_commit_SecMPS_v2

This commit is contained in:
2026-05-15 23:22:48 +08:00
commit 23ea4fe05f
13830 changed files with 298675 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Quartz.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Channels;
using System.Threading.Tasks;
namespace VolPro.Core.BackgroundServices.mail
{
/// <summary>
/// 邮件后台服务使用Channel队列处理邮件发送
/// </summary>
public class MailBackgroundService : BackgroundService
{
private readonly IServiceProvider _serviceProvider;
public MailBackgroundService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
Console.WriteLine("发送邮件服务已启动");
while (!stoppingToken.IsCancellationRequested)
{
try
{
// 从队列中读取邮件请求
var mailRequest = await MailService.MailQueue.Reader.ReadAsync(stoppingToken);
if (mailRequest.RetryCount > mailRequest.MaxRetryCount)
{
break;
}
using (var scope = _serviceProvider.CreateScope())
{
var mailService = scope.ServiceProvider.GetRequiredService<IMailService>();
try
{
await mailService.SendAsync(mailRequest.MailMessage.To,
mailRequest.MailMessage.Subject,
mailRequest.MailMessage.Body,
mailRequest.MailMessage.IsHtml);
}
catch (Exception ex)
{
mailRequest.RetryCount++;
Console.WriteLine($"邮件发送异常:{ex.Message + ex.StackTrace}");
Core.Services.Logger.AddAsync($"邮件发送异常:{ex.Message + ex.StackTrace}");
}
}
}
catch (ChannelClosedException)
{
// 队列已关闭,退出循环
break;
}
catch (OperationCanceledException)
{
// 取消令牌触发,退出循环
break;
}
catch (Exception)
{
// 邮件队列处理出现未知错误,短暂延迟后继续处理
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
}
}
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
// 关闭队列写入器
MailService.MailQueue.Writer.Complete();
// 等待所有待处理的邮件完成
await base.StopAsync(cancellationToken);
}
}
}