我们的应用程序使用
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);
怎么走?
1条答案
按热度按时间t5fffqht1#
如果SMTP服务器有时接受、有时拒绝具有相同发件人和收件人的同一封电子邮件,则可能是服务器反垃圾邮件策略的结果。例如:
您可以通过以下方法(临时)验证SMTP服务器设置是否是问题的原因:
如果这不能解决你的问题,那么使用WireShark这样的工具来记录SMTP对话,并检查在RCPT TO命令中发送了哪些电子邮件地址,以及在哪些情况下SMTP服务器会拒绝它们。