2011-07-08 37 views
1

我正在开发一个网站,我需要在按下提交按钮后向客户端发送邮件。但其次,我不希望客户端等到发送邮件,然后再发送邮件他被推进到下一页。 只要他按下提交按钮,他应该被重定向到下一页,而在后台发送邮件。在后台发送邮件来自asp.net

我试过异步发送邮件。在下面的代码中,它发送邮件。当操作完成时,它将客户端重定向到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"; 
    } 

} 

回答

1

如果你不想等待邮件发送,那么你应该立即调用SendAsync()方法(在SendCompleted处理器代替)后重定向:

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

我已经尝试过,但它仍然等待发送邮件。发送邮件后,它只重定向到“About.aspx” – Ishan

0

认沽你所有的代码在threadPool:

ThreadPool.QueueUserWorkItem(o => { 

//your code here..... 

}); 

对我来说它工作正常。