C# SmptClient SendAsync阻止应用程序,不异步发送
我使用开发服务器和SmtpClient.SendAsync发送邮件,但它仍然会阻止页面上的所有其他操作,直到发送完成。我搜索了很多,似乎看不出问题出在哪里C# SmptClient SendAsync阻止应用程序,不异步发送,c#,asp.net,smtpclient,sendasync,C#,Asp.net,Smtpclient,Sendasync,我使用开发服务器和SmtpClient.SendAsync发送邮件,但它仍然会阻止页面上的所有其他操作,直到发送完成。我搜索了很多,似乎看不出问题出在哪里 protected void SendMailButton_Click(object sender, EventArgs e) { SendMailTemplate("verify@site.com", "your-email@gmail.com", "Your company Listing is Approved
protected void SendMailButton_Click(object sender, EventArgs e) {
SendMailTemplate("verify@site.com", "your-email@gmail.com", "Your company Listing is Approved !", "CompanyApproved.txt", new string[] { "Send Mail company" });
}
public void SendMailTemplate(string From, string To, string Subject, string EmailTemplate, string[] Params) {
var message = new MailMessage(From, To);
message.IsBodyHtml = true;
message.Subject = Subject;
var sr = new StreamReader(HttpRuntime.AppDomainAppPath + "/Resources/EmailTemplates/" + EmailTemplate); //Cannot use Server.MapPath here
message.Body = sr.ReadToEnd(); sr.Close();
for (int i = 0; i < Params.Length; i++) {
message.Body = message.Body.Replace("<%Param" + (i + 1) + "%>", Params[i]);
}
var smtpClient = new SmtpClient("mail.site.com", 25);
smtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
smtpClient.SendCompleted += (s, e) => { smtpClient.Dispose(); message.Dispose(); };
smtpClient.SendAsync(message, null);
}
protectedvoid SendMailButton\u单击(对象发送者,事件参数e){
SendMailTemplate(“verify@site.com你的-email@gmail.com“,“您的公司上市已批准!”,“CompanyApproved.txt”,新字符串[]{“发送邮件公司”});
}
public void SendMailTemplate(字符串From、字符串To、字符串主题、字符串EmailTemplate、字符串[]参数){
var消息=新邮件消息(从,到);
message.IsBodyHtml=true;
message.Subject=Subject;
var sr=new StreamReader(HttpRuntime.AppDomainAppPath+“/Resources/EmailTemplates/“+EmailTemplate);//无法在此处使用Server.MapPath
message.Body=sr.ReadToEnd();sr.Close();
对于(int i=0;i{smtpClient.Dispose();message.Dispose();};
smtpClient.SendAsync(消息,空);
}
当它无法与smtp建立连接时,我收到了这个消息。在真正的异步操作开始之前,它会执行一些其他操作,可能是连接到smtp。完成后,异步操作将在内部执行。尝试将它(为了测试)放到backgroundworker中,看看该操作是否会继续。谢谢。。他那样做了。。正在使用Thread.Queue。。