.net 获取邮箱不可用,无效收件人太多错误

elcex8rz  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(311)

我们的应用程序使用

new SmtpClient(smtpServer).Send(message);

我们正在确保smtpServer有效,邮件具有“收件人”和“发件人”地址、主题和正文。如果缺少其中任何一项,我们将在尝试发送邮件之前记录异常。
但是应用程序经常会失败,下面是例外。

电子邮件失败:System.Net.Mail.SmtpException:邮箱不可用。服务器响应为:无效收件人太多。

现在,请注意,电子邮件发送功能并不是总是失败。对于相同的“收件人”地址,它失败的次数可能是一半左右。所以,如果应用程序尝试发送电子邮件100次,我们会得到大约40+相同的消息失败。
我已经验证了收件人地址和发件人地址的存在。我们从上个月从Outlook转到Gmail时就遇到了这个问题。下面是代码。

if (fromAddress.Length == 0)
                fromAddress = Resources.FromAddress;

            if (toAddress.Length == 0) return "To Address is Required.";

            if (smtpServer.Length == 0)
                smtpServer = Resources.SMTPServer;

            if (string.IsNullOrEmpty(smtpServer))
                return "SMTP sever not specified";

            MailMessage mailMessage = new MailMessage();

            //set the addresses
            mailMessage.From = new MailAddress(fromAddress);
            string[] toAdds = toAddress.Split(';');
            short i = 0;
            foreach (string address in toAdds)
            {
               if(i==0) mailMessage.To.Add(address); else  mailMessage.CC.Add(address);
                i++;
            }

            if (!string.IsNullOrEmpty(bcc))
            {
                string[] bccAddresses = bcc.Split(';');

                foreach (string address in bccAddresses)
                {
                    mailMessage.Bcc.Add(address);
                }
            }

            if (!string.IsNullOrEmpty(cc))
            {
                string[] ccAddresses = cc.Split(';');

                foreach (string address in ccAddresses)
                {
                    mailMessage.CC.Add(address);
                }
            }

            if (subject.Length > 0)
                mailMessage.Subject = subject;

            mailMessage.Body = sBody;
            mailMessage.IsBodyHtml = true;

            SmtpClient emailClient = new SmtpClient(smtpServer);
            emailClient.Send(mailMessage);

怎么走?

t5fffqht

t5fffqht1#

如果SMTP服务器有时接受、有时拒绝具有相同发件人和收件人的同一封电子邮件,则可能是服务器反垃圾邮件策略的结果。例如:

  • Directory Harvest Attack Prevention (DHAP):在给定时间段内超过RCPT TO命令的数量时,会导致“550 Too many invalid recipients”错误。
  • 配额:邮箱/IP每分钟/秒可发送的邮件数量限制,以防止垃圾邮件。

您可以通过以下方法(临时)验证SMTP服务器设置是否是问题的原因:

  • 将SMTP客户端的IP地址列入白名单
  • 禁用应用于发件人邮箱的任何配额/反垃圾邮件策略

如果这不能解决你的问题,那么使用WireShark这样的工具来记录SMTP对话,并检查在RCPT TO命令中发送了哪些电子邮件地址,以及在哪些情况下SMTP服务器会拒绝它们。

相关问题