. NET Базовое исключение Mailkit Слишком много получателей - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь отправить электронное письмо 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

1 Ответ

0 голосов
/ 31 марта 2020

Единственный способ исправить это - уменьшить количество получателей, указанных в каждом сообщении.

Вместо этого:

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);
    }
}
...