我正在尝试向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
解决此问题的唯一方法是减少您在每封邮件中指定的收件人数量。
因此,不要这样做:
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);
}
}