C# ASP.net一次单击即可向多个收件人发送电子邮件
我有一个数据网格,显示不同的行,每个行都有一个链接,可以将电子邮件发送给符合该行标准的多个收件人 比如说 第1列第1列日本第3列第4列(链接发送电子邮件给所有日本用户) row2 col1瑞典co3 col4(链接发送电子邮件给所有瑞典用户) 现在,当用户单击链接时,会打开另一个页面,其中包含另一个网格视图控件,显示该行的所有收件人,但在此之前,会向所有收件人发送电子邮件 问题是它需要很多时间,我想知道我的方法是否错误,我正在为datarow中的每一行创建一个邮件对象C# ASP.net一次单击即可向多个收件人发送电子邮件,c#,asp.net,C#,Asp.net,我有一个数据网格,显示不同的行,每个行都有一个链接,可以将电子邮件发送给符合该行标准的多个收件人 比如说 第1列第1列日本第3列第4列(链接发送电子邮件给所有日本用户) row2 col1瑞典co3 col4(链接发送电子邮件给所有瑞典用户) 现在,当用户单击链接时,会打开另一个页面,其中包含另一个网格视图控件,显示该行的所有收件人,但在此之前,会向所有收件人发送电子邮件 问题是它需要很多时间,我想知道我的方法是否错误,我正在为datarow中的每一行创建一个邮件对象 DataView dv;
DataView dv;
if (dv.Count > 0)
{
foreach (DataRow row in dv.Table.Rows)
{
StringBuilder sbEmailBody = new StringBuilder();
sbEmailBody.Append("<div id='mail' style='height:400px;width:750px; padding:10px; margin: 0 auto; '>");
sbEmailBody.Append("Hi " + row["FirstName"].ToString() + ", <br/><br/>");
sbEmailBody.Append("You have registered with siteName, your details match with the following clinical trial.");
sbEmailBody.Append("Please contact the below trial representative for further details</br></br>");
sbEmailBody.Append("<b>Trial Name:</b> " + Session["trialName"].ToString() + "</br>");
sbEmailBody.Append("<b>Contact Name:</b> " + Session["recName"].ToString() + "</br>");
sbEmailBody.Append("<b>Contact Email:</b> " + Session["username"].ToString() + "</br>");
sbEmailBody.Append("<b>Contact Telephone:</b> " + Session["tele"].ToString() + "</br>");
sbEmailBody.Append("<hr> </hr>");
sbEmailBody.Append("<a href='www.sitename.com' style=text-decoration:none><span id='logo' style='font-size:X-Large;font-weight:bold;color:Black;'>siteName</span></a><br/>");
sbEmailBody.Append("<span id='stopEmail' style='font-size:Smaller;'>");
sbEmailBody.Append("if you want to stop receiving emails from sitename please click <a href='www.bbc.co.uk' style=text-decoration:none>here</a>");
sbEmailBody.Append("</span>");
sbEmailBody.Append("</div>");
MailMessage mailMessage = new MailMessage("siteEmail@email.com", row["EmailAdd"].ToString());
mailMessage.Subject = "Clinical trial recruiter shown interest in your profile";
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
mailMessage.Body = sbEmailBody.ToString();
mailMessage.IsBodyHtml = true;
SmtpClient smtpClient = new SmtpClient();
smtpClient.Send(mailMessage);
}
}
DataView-dv;
如果(dv.Count>0)
{
foreach(dv.Table.Rows中的数据行)
{
StringBuilder sbEmailBody=新的StringBuilder();
sbEmailBody.Append(“”);
sbEmailBody.Append(“Hi”+行[“FirstName”].ToString()+”,
);
追加(“您已向siteName注册,您的详细信息与以下临床试验相匹配。”);
sbEmailBody.Append(“请联系以下试用代表以了解更多详细信息””;
sbEmailBody.Append(“试用名:“+会话[“trialName”].ToString()+””;
sbEmailBody.Append(“联系人姓名:“+Session[“recName”].ToString()+””;
sbEmailBody.Append(“联系电子邮件:+会话[“用户名”].ToString()+””;
sbEmailBody.Append(“联系电话:+Session[“tele”].ToString()+””;
sbEmailBody.Append(“
”);
sbEmailBody.Append(“
”);
sbEmailBody.Append(“”);
sbEmailBody.Append(“如果您想停止接收来自sitename的电子邮件,请单击”);
sbEmailBody.Append(“”);
sbEmailBody.Append(“”);
MailMessage MailMessage=新的MailMessage(“siteEmail@email.com,行[“EmailAdd”].ToString());
mailMessage.Subject=“临床试验招聘人员对您的个人资料感兴趣”;
mailMessage.BodyEncoding=System.Text.Encoding.UTF8;
mailMessage.Body=sbEmailBody.ToString();
mailMessage.IsBodyHtml=true;
SmtpClient SmtpClient=新的SmtpClient();
smtpClient.Send(mailMessage);
}
}
您可以创建一个任务
来为您发送邮件
Task.Run(() => YourMailMethod());
在YourMailMethod
方法中,您可以放置您现在已有的代码
该任务将在后台运行。您可以执行类似thois的异步操作来加快进度 公共委托无效发送消息(SmtpClient客户端、MailMessage消息)
您希望我在哪里调用task.run。目前,我的代码在页面加载方法中,但我希望加载页面,但发送邮件的任务在background@GROVER_SYAAN:然后把它放在那里。bunny问你同样的问题,我的代码正在page_load事件中运行,但是我希望在邮件方法仍在数据库中运行时,使用datagrid加载页面background@GROVER_SYAAN:这也是一个完美的解决方案。你为什么不试试这个?
SendMessage Smessage = new SendMessage(ResultCallback);
//smtp.Send(message);
Smessage.BeginInvoke(smtpClient, message, null, null);
public void ResultCallback(SmtpClient client, MailMessage m)
{
try
{
client.Send(m);
client.Dispose();
m.Dispose();
}
catch
{
}
}