C# ASP.net一次单击即可向多个收件人发送电子邮件

C# ASP.net一次单击即可向多个收件人发送电子邮件,c#,asp.net,C#,Asp.net,我有一个数据网格,显示不同的行,每个行都有一个链接,可以将电子邮件发送给符合该行标准的多个收件人 比如说 第1列第1列日本第3列第4列(链接发送电子邮件给所有日本用户) row2 col1瑞典co3 col4(链接发送电子邮件给所有瑞典用户) 现在,当用户单击链接时,会打开另一个页面,其中包含另一个网格视图控件,显示该行的所有收件人,但在此之前,会向所有收件人发送电子邮件 问题是它需要很多时间,我想知道我的方法是否错误,我正在为datarow中的每一行创建一个邮件对象 DataView dv;

我有一个数据网格,显示不同的行,每个行都有一个链接,可以将电子邮件发送给符合该行标准的多个收件人 比如说

第1列第1列日本第3列第4列(链接发送电子邮件给所有日本用户)

row2 col1瑞典co3 col4(链接发送电子邮件给所有瑞典用户)

现在,当用户单击链接时,会打开另一个页面,其中包含另一个网格视图控件,显示该行的所有收件人,但在此之前,会向所有收件人发送电子邮件

问题是它需要很多时间,我想知道我的方法是否错误,我正在为datarow中的每一行创建一个邮件对象

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
            {

            }
        }