我们MailKit
通过创建客户端、建立连接和发送邮件来成功发送电子邮件。非常标准的东西,当我们在应用程序中收到一条消息时,我们会做一些事情并通过电子邮件发送。
但是,我们希望能够尽快处理成千上万封电子邮件。
我们的目标电子邮件服务器可能不可用,因此我们可以快速备份邮件,从而产生积压。
使用MailKit
,什么是处理邮件的最佳和最快捷的方式,以便尽快发送。例如,此时每封邮件可能会一个接一个地处理,如果每个邮件需要一秒钟来处理,则发送 40000 封邮件可能需要很长时间。
我们一直在使用 aparallel foreach
来启动多个线程,但这有局限性。任何建议或建议将不胜感激。
添加的代码示例:更正,添加了新的代码示例。这要快得多,但我无法让它每次都创建一个新连接。Exchange 抛出错误“已指定发件人”。目前平均每秒发送大约 6 封邮件。
var rangePartitioner = Partitioner.Create(0, inpList.Count, 15);
var po = new ParallelOptions { MaxDegreeOfParallelism = 30 };
Parallel.ForEach(rangePartitioner, (range, loopState) =>
{
using (var client = new SmtpClient(new SlabProtocolLogger()))
{
client.Connect(_appSettings.RelayAddress, _appSettings.RelayPort);
client.AuthenticationMechanisms.Remove("XOAUTH2");
for (int i = range.Item1; i < range.Item2; i++)
{
var message = _outboundQueueRepository.Read(inpList[i]).Load();
client.Send(message.Body, message.Metadata.Sender, message.Metadata.Recipients.Select(r => (MailboxAddress)r));
_outboundQueueRepository.Remove(inpList[i]);
};
}
});