Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何知道SmtpClient是否已准备好发送电子邮件_C#_Email - Fatal编程技术网

C# 如何知道SmtpClient是否已准备好发送电子邮件

C# 如何知道SmtpClient是否已准备好发送电子邮件,c#,email,C#,Email,在C#中,如果在前一封邮件完成之前尝试发送带有SendAsync的电子邮件,则会引发此异常: 异步调用已在进行中。必须先完成或取消该操作,然后才能调用此方法 这是有道理的,但是我找不到像IsBusy这样的属性来检查客户端是否准备好接受新的发送请求。我可能只是尝试处理这个异常,但我想知道是否有更干净的方法 更新 我正在尝试使用SendMailAsync: public async Task SendEmail(string address, string subject, string body,

在C#中,如果在前一封邮件完成之前尝试发送带有
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)