如何修复此C#SendAsync方法?

如何修复此C#SendAsync方法?,c#,sendasync,C#,Sendasync,我是一名新的ASP.NET开发人员,我正在从事一个项目,在该项目中,管理员/系统可以向用户发送电子邮件。由于我不希望管理员等待系统发送电子邮件,所以我计划使用SendAsync方法 然而,我得到了一个非常奇怪的错误 “捕获到SMTPExecution:发送邮件失败。” 我无法解决它 供您参考,我使用的是.NETFramework4 protected void btnSend_Click(object sender, EventArgs e) { try

我是一名新的ASP.NET开发人员,我正在从事一个项目,在该项目中,管理员/系统可以向用户发送电子邮件。由于我不希望管理员等待系统发送电子邮件,所以我计划使用SendAsync方法

然而,我得到了一个非常奇怪的错误

“捕获到SMTPExecution:发送邮件失败。”

我无法解决它

供您参考,我使用的是.NETFramework4

protected void btnSend_Click(object sender, EventArgs e)
    {
    try
            {
                Mailer mail = new Mailer();
                string senderE = ConfigurationManager.AppSettings["EmailID"].ToString();
                string senderName = "Test User"
                string recipientName = "TestSender";
                string subject = txtSubject.Text;
                string body = txtMessage.Text;
                mail.SendAsync(senderE, senderName, recipient, recipientName, subject, body);

                lblInfo.Text = "sent successfully :)";
                Response.Redirect("Test.aspx");
            }
            catch
            {
                lblInfo.Text = "Error!!!";
            }}
以下是自定义邮件器类中SendAsync方法的代码:

    public void SendAsync(string sender, string senderName, string recipient, string recipientName, string subject, string body)
        {
            var message = new MailMessage()
            {
                From = new MailAddress(sender, senderName),
                Subject = subject,
                Body = body,
                IsBodyHtml = true
            };
            message.To.Add(new MailAddress(recipient, recipientName));

            try
            {
                var client = new SmtpClient();
                client.SendCompleted += new SendCompletedEventHandler(MailDeliveryComplete);
                string userState = "Test";
                client.SendAsync(message, userState);
            }
            catch (Exception ex)
            {
                //handle exeption
                throw ex;
            }
            finally
            {
                //clean up.
                message.Dispose();
            }
        }

public static void MailDeliveryComplete(object sender, AsyncCompletedEventArgs e)
    {
        string message = "";
        // Get the unique identifier for this asynchronous operation.
        MailMessage mail = e.UserState as MailMessage;

        if (e.Error != null)
        {
            //handle error
            message = "Error " + e.Error.ToString() + " occurred";
        }
        else if (e.Cancelled)
        {
            //handle cancelled
            message = "Send canceled for mail with subject " + mail.ToString();
        }
        else
        {
            //handle sent email
            message = "Mail sent successfully";
        }

    }
那么我如何修复它呢?

更新#1:

顺便说一下,我正在将所有SMTP配置保存在Web.Config文件中。以下是设置:

<system.net>
    <mailSettings>
      <smtp from="My Gmail Account" deliveryMethod="Network">
        <network enableSsl="true" host="smtp.gmail.com" port="587" userName="Username" password="Password" defaultCredentials="false"/>
      </smtp>
    </mailSettings>
  </system.net>

知道我为什么会出现这种错误吗?

这是哪一行?是否有innerex?仅供参考:永远不要使用
throw-ex。这会破坏堆栈跟踪(异常源将指示为
throw ex
,而不是实际抛出的位置)!只需使用
throw要正确重新发送ID,是否将本地主机设置为SMTP服务器?顺便说一下,SMTP服务器使用端口25作为默认端口,它被大多数ISPsDId阻止为默认端口。您是否尝试使用相同的值同步?逐步简化代码。您可能忘了设置EnableSSL或其他内容。ps:客户端凭据如何?
if (e.Error != null)
        {
            //handle error
            message = "Error " + e.Error.ToString() + " occurred";
        }