【问题标题】:Send mail from asp.net in background在后台从 asp.net 发送邮件
【发布时间】:2013-09-17 00:39:24
【问题描述】:

我正在开发一个网站,我需要在客户按下提交按钮后向客户发送邮件。但其次,我不希望客户等到邮件发送完毕,然后他才进入下一页。 当他按下提交按钮时,他应该被重定向到下一页,而在后台发送邮件。

我尝试过异步发送邮件。在下面的代码中,它发送邮件。当操作完成时,它将客户端重定向到 About.aspx。

    MailMessage m = new MailMessage();
    MailAddress emailsender = new MailAddress(senderemail.Text, "User");
    m.From = emailsender;
    MailAddress recipient = new MailAddress(dest.Text);
    m.To.Add(recipient);
    m.Body = message.Text.ToString();
    m.Subject = subj.Text;
    SmtpClient client = new SmtpClient();
    //Add the Creddentials- use your own email id and password

    client.Credentials = new System.Net.NetworkCredential(senderemail.Text,password.Text);

    client.Port = 587; // Gmail works on this port
    client.Host = "smtp.gmail.com";
    client.EnableSsl = true; //This enables the SSL
    Object usertoken=m;
    client.SendCompleted += new SendCompletedEventHandler(client_SendCompleted);

    try
    {
        client.SendAsync(m, usertoken);
    }
    catch (Exception ex)
    {
        Exception ex2 = ex;
        string errorMessage = string.Empty;
        while (ex2 != null)
        {
            errorMessage += ex2.ToString();
            ex2 = ex2.InnerException;
        }
        HttpContext.Current.Response.Write(errorMessage);
    } // end try 
  void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
    MailMessage mail = e.UserState as MailMessage;
    Response.Redirect("About.aspx");

    if (!e.Cancelled && e.Error != null)
    {
        lblMessage.Text = "Mail sent successfully";
    }

}

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    如果您不想等待邮件发送,那么您应该在调用 SendAsync() 方法后立即重定向(而不是在 SendCompleted 处理程序中):

    client.SendAsync(m, usertoken);
    lblMessage.Text = "Mail sent";
    Response.Redirect("About.aspx");
    

    【讨论】:

    • 我试过了,但它仍然在等待发送邮件。发送邮件后,它只会重定向到“About.aspx”
    【解决方案2】:

    将所有代码放入线程池中:

    ThreadPool.QueueUserWorkItem(o => { 
    
    //your code here.....
    
    });
    

    对我来说效果很好。

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 2015-05-19
      • 2011-09-13
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 2017-04-02
      相关资源
      最近更新 更多