【发布时间】:2022-10-04 17:29:33
【问题描述】:
我最近遇到了 Office 365 每分钟 30 封邮件的限制问题,我提出这个问题是为了寻找其他解决方案,并展示我为克服每分钟 30 封邮件限制所做的解决方案。
【问题讨论】:
标签: .net email office365 limit
我最近遇到了 Office 365 每分钟 30 封邮件的限制问题,我提出这个问题是为了寻找其他解决方案,并展示我为克服每分钟 30 封邮件限制所做的解决方案。
【问题讨论】:
标签: .net email office365 limit
对于每分钟 30 封邮件的问题,您只需创建 Queue 后台服务即可解决:enter link description here
然后,您可以创建一个继承自 QueuedHostedService 的类 EmailQueuedHostedService 并覆盖 BackgroundProcessing 方法,如下所示:
public class EmailQueuedHostedService : QueuedHostedService
{
private readonly ILogger<EmailQueuedHostedService> _logger;
private readonly TimersTimer _timer;
private int MailsSent = 0;
private const int MailsSentInMinute = 30;
public EmailQueuedHostedService(IBackgroundTaskQueue taskQueue,
ILogger<EmailQueuedHostedService> logger) : base(taskQueue, logger)
{
_logger = logger;
_timer = new TimersTimer(60 * 1000);
_timer.Elapsed += (sender, e) => MailsSent = 0;
_timer.Start();
}
protected override async Task BackgroundProcessing(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
if (MailsSent < MailsSentInMinute)
{
var workItem = await TaskQueue
.DequeueAsync(stoppingToken);
try
{
await workItem(stoppingToken);
MailsSent++;
}
catch (Exception ex)
{
_logger.LogError(ex,
"Error occurred executing {WorkItem}.", nameof(workItem));
}
}
}
}
}
现在,您的电子邮件队列服务将控制每分钟发送的电子邮件数量,因此如果您超过限制,它们不会抛出异常。
【讨论】: