【问题标题】:Getting a Mailbox unavailable. Too many invalid recipients error获取邮箱不可用。无效收件人过多错误
【发布时间】:2015-03-17 17:19:37
【问题描述】:

我们的应用程序使用发送电子邮件

new SmtpClient(smtpServer).Send(message);

我们确保 smtpServer 有效,消息具有收件人地址和发件人地址、主题和正文。如果缺少其中任何一个,我们甚至会在尝试发送消息之前记录一个异常。

但应用程序经常失败并出现以下异常。

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

现在,请注意电子邮件发送功能并非总是失败。对于同一个“To”地址,它失败了,可能是一半左右的时间。因此,如果应用程序尝试发送电子邮件 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);

有什么路线吗?

【问题讨论】:

  • Feroz 发生这种情况的原因有很多。如果您有单独的电子邮件,其中一封的电子邮件地址中的主机名无效,或者您没有正确解析收件人列表。 . 也许你有 2 个电子邮件地址冲突,例如 tomthumb@aol.commarrK@gmail.com 并且没有适当的分隔符.. 我建议的最好的事情是设置断点处理大列表并查看它在哪些电子邮件上失败并检查值..这可能就是这么简单..
  • 在不向我们透露实际收件人电子邮件地址的情况下,您能否给出一个电子邮件屏蔽或更改它们的确切示例...
  • 我们在“收件人”中只有一个电子邮件地址,在“抄送”中只有一个。类似于 To 中的“axxxxs@txxxxk.com”和 CC 中的“axxxxk@rxxxxd.com”,发件人地址类似于 Axxxxs@rxxxxd.com
  • 这已成为一个难以破解的问题,因为所有电子邮件都被发送到相同的“收件人”、相同的“抄送”和相同的“发件人”地址,其中一些邮件失败了。 Outlook 与 Gmail 的角度也很有趣,因为投诉大约在公司从 Outlook 转向 Gmail 的同时开始出现。
  • 显示您如何发送多封电子邮件以及如何为其分配分隔符的代码。例如,您是否使用,; 作为电子邮件分隔符...修剪或获取最后一封电子邮件的子字符串位置,您不必使用结束分隔符,因此它在 CC 部分的检查员 "axxxxs@txxxxk.com;""axxxxk@rxxxxd.com" 中应该看起来像这样

标签: c# .net smtp


【解决方案1】:

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

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

您可以通过(暂时)验证 SMTP 服务器设置是否是导致您的问题的原因:

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

如果这不能解决您的问题,请使用WireShark 之类的工具记录 SMTP 对话,并准确检查 RCPT TO 命令中发送了哪些电子邮件地址,以及在哪些情况下 SMTP 服务器会拒绝它们。然后,在这里发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多