我为我的网站配置了smpt邮件,当我尝试发送一封电子邮件时它正常工作,但是当我想将它发送给更多人时我有以下错误,另外我使用SendAsyn方法。
语法错误,命令无法识别。服务器响应是:
在System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult结果)
在System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult结果)
服务不可用,关闭传输通道。
服务器响应是:太多坏命令,关闭传输通道
在System.Net.Mail.SendMailAsyncResult.End(IAsyncResult结果)
在System.Net.Mail.SmtpTransport.EndSendMail(IAsyncResult结果)
在System.Net.Mail.SmtpClient.SendMailCallback(IAsyncResult结果
解决方案是什么?
答案 0 :(得分:0)
我有类似的情况,我发送多封电子邮件,而不是等待一封电子邮件发送,然后发送另一封电子邮件。
我所做的是为每个要发送和发送的邮件发起新的SMTPClient。像这样:
private void SendMailAsync(string ids, MailMessage mail)
{
SmtpClient client = null;
try
{
client = new SmtpClient(ConfigurationManager.AppSettings["MailServer"], Convert.ToInt32(ConfigurationManager.AppSettings["MailPort"]));
string userState = "MailQueueID_" + ids;
client.SendCompleted += (sender, e) =>
{
// Get the unique identifier for this asynchronous operation
String token = (string)e.UserState;
DateTime now = DateTime.Now;
try
{
if (e.Cancelled)
{
LogError(new Exception(token + " - Callback cancelled"));
return;
}
if (e.Error != null)
{
LogError(e.Error);
}
else
{
logWriter.WriteToLog(this.jobSite + " - " + token + " (Email sent)");
try
{
int updated = UpdateMailQueue(token, now);
if (updated > 0)
{
// Update your log
}
}
catch (SqlException sqlEx)
{
LogError(sqlEx);
}
}
}
catch (ArgumentNullException argument)
{
LogError(argument);
}
finally
{
client.SendCompleted -= client_SendCompleted;
client.Dispose();
mail.Dispose();
// Delete the attachment if any, attached to this email
DeleteZipFile(token);
counter--;
}
};
client.SendAsync(mail, userState);
counter++;
}
catch (ArgumentOutOfRangeException argOutOfRange)
{
LogError(argOutOfRange);
}
catch (ConfigurationErrorsException configErrors)
{
LogError(configErrors);
}
catch (ArgumentNullException argNull)
{
LogError(argNull);
}
catch (ObjectDisposedException objDisposed)
{
LogError(objDisposed);
}
catch (InvalidOperationException invalidOperation)
{
LogError(invalidOperation);
}
catch (SmtpFailedRecipientsException failedRecipients)
{
LogError(failedRecipients);
}
catch (SmtpFailedRecipientException failedRecipient)
{
LogError(failedRecipient);
}
catch (SmtpException smtp)
{
LogError(smtp);
}
}
错误是在SendCompletedEvent处理程序中捕获的。
当然,只有一封电子邮件出现错误,而另外7封邮件在同一次运行之前和之后都通过不同的邮箱。导致错误的原因,我还是不知道。
当我再次运行我的程序时,它会选择未发送的邮件并将其成功发送出去。
希望这有助于其他人知道这个问题是在15个月前发布的。