。NET Core Mailkit异常收件人太多

问题描述 投票:0回答:1

我正在尝试向250个用户发送电子邮件。这是我的代码:

using(var emailClient = new SmtpClient())
{
    emailClient.Connect(Configuration.Server, Configuration.Port, Configuration.UseSSL);
    emailClient.AuthenticationMechanisms.Remove("XOAUTH2");
    emailClient.Authenticate(Configuration.UserName, Configuration.Password);
    try
    {
        foreach(var item in EmailContents)
        {
            var message = new MimeMessage();
            message.To.AddRange(item.Receiver.Select(x => new MailboxAddress(x)));
            message.From.AddRange(item.Sender.Select(x => new MailboxAddress(x)));
            message.Subject = item.Subject;
            message.Body = new TextPart(TextFormat.Html)
            {
                Text = item.Content
            };
            emailClient.Send(message);
        }
    }
    catch(Exception e)
    {
        logger.LogError(e,ResilientLogger.ClassLibrary.Globals.LoggingGlobals.Error + "-" + e.Message);
    }
    emailClient.Disconnect(true);
}

但是,由于某些原因,我不断收到此错误:

MailKit.Net.Smtp.SmtpCommandException: Too many recipients
   at MailKit.Net.Smtp.SmtpClient.OnRecipientNotAccepted(MimeMessage message, MailboxAddress mailbox, SmtpResponse response)
   at MailKit.Net.Smtp.SmtpClient.ProcessRcptToResponse(MimeMessage message, MailboxAddress mailbox, SmtpResponse response)
   at MailKit.Net.Smtp.SmtpClient.RcptToAsync(FormatOptions options, MimeMessage message, MailboxAddress mailbox, Boolean doAsync, CancellationToken cancellationToken)
   at MailKit.Net.Smtp.SmtpClient.SendAsync(FormatOptions options, MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsync, CancellationToken cancellationToken, ITransferProgress progress)
   at MailKit.Net.Smtp.SmtpClient.SendAsync(FormatOptions options, MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsync, CancellationToken cancellationToken, ITransferProgress progress)
   at MailKit.Net.Smtp.SmtpClient.Send(FormatOptions options, MimeMessage message, CancellationToken cancellationToken, ITransferProgress progress)
   at ManagementStudio.Connect.Email.Email.BulkSend(EmailConfigurationViewModel Configuration, List`1 EmailContents)

这是IIS错误还是可以在代码中解决的问题?我正在使用IIS8

email asp.net-core iis .net-core mailkit
1个回答
0
投票

解决此问题的唯一方法是减少您在每封邮件中指定的收件人数量。

因此,不要这样做:

foreach(var item in EmailContents)
{
    var message = new MimeMessage();
    message.To.AddRange(item.Receiver.Select(x => new MailboxAddress(x)));
    message.From.AddRange(item.Sender.Select(x => new MailboxAddress(x)));
    message.Subject = item.Subject;
    message.Body = new TextPart(TextFormat.Html)
    {
        Text = item.Content
    };
    emailClient.Send(message);
}

执行此操作:

foreach(var item in EmailContents)
{
    var message = new MimeMessage();
    message.From.AddRange(item.Sender.Select(x => new MailboxAddress(x)));
    message.Subject = item.Subject;
    message.Body = new TextPart(TextFormat.Html)
    {
        Text = item.Content
    };

    int i = 0;
    while (i < item.Recipients.Count) {
        message.MessageId = MimeUtils.GenerateMessageId ();
        message.To.Clear ();

        for (int j = 0; j < 50 && i < item.Recipients.Count; j++)
            message.To.Add (MailboxAddress.Parse (item.Recipients[i++]);

        emailClient.Send(message);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.