Net smtp SendMailAsync函数返回IsCanceled



我的SendMailAsync例程有问题。在ContinueWith()方法中我使用的是SendMailContinuation()方法,其中task.IsCanceled始终为真。

网络版本4.6.1

private void SendEMail()
{
try
{
using (SmtpClient smtpClient = new SmtpClient(EmailServerAddress))
{
_logger.Info("Sending Email to: {0} ", recipient);
MailAddress from = new MailAddress(EmailAddress, EmailAddress, Encoding.UTF8),
to = new MailAddress(recipient, recipient, Encoding.UTF8);

using (MailMessage message = new MailMessage(from, to))
{
message.SubjectEncoding = Encoding.UTF8;
message.Priority = MailPriority.High;
message.Body = "";
message.BodyEncoding = Encoding.UTF8;

smtpClient.Credentials = new NetworkCredential(UserName, UserPassword);

smtpClient.SendMailAsync(message)
.ContinueWith(SendMailContinuation);
}
}
catch (Exception ex)
{
_logger.Error(ex);
}
}
private void SendMailContinuation(Task task)
{
if (task.IsFaulted)
{
_logger.Error(task.Exception);
}
else if (task.IsCanceled)
{
_logger.Warn(task.Status);
}
}

您应该等待smtpClient。SendMailAsync((函数。您可以通过将函数"SendEMail(("设置为异步任务并在smtpClient之前添加wait来实现这一点。SendMailAsync((调用。

最新更新