C# 如何知道SmtpClient是否已准备好发送电子邮件
在C#中,如果在前一封邮件完成之前尝试发送带有C# 如何知道SmtpClient是否已准备好发送电子邮件,c#,email,C#,Email,在C#中,如果在前一封邮件完成之前尝试发送带有SendAsync的电子邮件,则会引发此异常: 异步调用已在进行中。必须先完成或取消该操作,然后才能调用此方法 这是有道理的,但是我找不到像IsBusy这样的属性来检查客户端是否准备好接受新的发送请求。我可能只是尝试处理这个异常,但我想知道是否有更干净的方法 更新 我正在尝试使用SendMailAsync: public async Task SendEmail(string address, string subject, string body,
SendAsync
的电子邮件,则会引发此异常:
异步调用已在进行中。必须先完成或取消该操作,然后才能调用此方法
这是有道理的,但是我找不到像IsBusy
这样的属性来检查客户端是否准备好接受新的发送请求。我可能只是尝试处理这个异常,但我想知道是否有更干净的方法
更新
我正在尝试使用SendMailAsync
:
public async Task SendEmail(string address, string subject, string body, Attachment attachment)
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress(m_smtp.username);
mail.To.Add(address);
mail.Subject = subject;
mail.Body = body;
mail.IsBodyHtml = true;
if (attachment != null)
{
mail.Attachments.Add(attachment);
}
await m_smtpClient.SendMailAsync(mail);
Console.WriteLine("Send completed!");
}
这会引发以下异常(但调试器不会中断执行):
如果我只将
SendMailAsync()
更改为Send()
,电子邮件将成功发送。现在不应该使用SendMailAsync
。使用SendMailAsync
。返回一个您应该等待的任务。或者,如果异步代码太复杂,请同步发送。如果您坚持使用SendAsync
,则在发送完成时会触发异常。您需要提供有关异常的更多详细信息。输出窗口(调试模式)中显示的消息、内部异常等是什么。没有出现内部异常。这很奇怪。然后捕获异常并记录它。
Exception thrown: 'System.Net.Mail.SmtpException' in mscorlib.dll
Failure sending mail.
System.NotSupportedException: Stream does not support reading.
at System.Net.Mime.MimeBasePart.EndSend(IAsyncResult asyncResult)
at System.Net.Mail.SmtpClient.SendMessageCallback(IAsyncResult result)