C# 使用ASP.NET4和c的批量电子邮件

C# 使用ASP.NET4和c的批量电子邮件,c#,asp.net,email,C#,Asp.net,Email,我需要使用ASP.NET4和c向我们网页上的注册用户发送批量电子邮件,以方便访问我们的产品和服务 本教程是: 在用户测试表中,我现在有两封电子邮件: firstEmail@domain.com secondEmail@domain.com 在这个测试中,我没有错误,因为电子邮件和密码对于单个用户是正确的,但我有两个问题 问题1 将收到三封电子邮件: 第一条信息: 发件人:account@domain.com 致:firstEmail@domain.com 第二条信息: 发件人:account@

我需要使用ASP.NET4和c向我们网页上的注册用户发送批量电子邮件,以方便访问我们的产品和服务

本教程是:

在用户测试表中,我现在有两封电子邮件:

firstEmail@domain.com secondEmail@domain.com 在这个测试中,我没有错误,因为电子邮件和密码对于单个用户是正确的,但我有两个问题

问题1

将收到三封电子邮件:

第一条信息: 发件人:account@domain.com 致:firstEmail@domain.com

第二条信息: 发件人:account@domain.com 致:firstEmail@domain.com, secondEmail@domain.com

第三条信息: 发件人:account@domain.com 致:firstEmail@domain.com, secondEmail@domain.com

我需要为单个用户发送一条消息:

First message:    
From: account@domain.com    
To: firstEmail@domain.com

Second message:    
From: account@domain.com    
To: secondEmail@domain.com
问题2

如何设置发送第一条消息和下一条消息之间的时间

我在代码隐藏中使用了以下行:

protected void btnSend_Click(object sender, EventArgs e)
{
     try
        {
            SmtpClient smtpClient = new SmtpClient();
            System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage(); 

            lbltotalcount.Text = string.Empty;

            foreach (GridViewRow grow in grvCustomers.Rows)
            {
                try
                {
                    email = grow.Cells[0].Text.Trim();
                    password = grow.Cells[1].Text.Trim();

                    to = email.ToString();
                    from = "account@domain.com";

                    mailMessage.From = new System.Net.Mail.MailAddress(from);
                    mailMessage.To.Add(to);
                    mailMessage.Subject = "Test send email";

                    Body = "";
                    Body += '\n' + "<b>Email: </b>";
                    Body += '\n' + "<br>  " + email.ToString() + "<br>";
                    Body += '\n' + "<b>Password: </b>";
                    Body += '\n' + "<br>  " + password.ToString() + "<br><br>";

                    mailMessage.Body = Body;
                    mailMessage.BodyEncoding = Encoding.UTF8;
                    mailMessage.IsBodyHtml = true;

                    smtpClient.Host = "localhost";
                    smtpClient.Send(mailMessage);                        

                    Response.Write("<br />" + mailMessage.Body.ToString());
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
            } 
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }
如有任何建议,我将不胜感激


谢谢

问题1的意思是你不想在发送到两个电子邮件地址时生成两次消息

如果是这样,您可以将消息逻辑抽象为一个方法,并将电子邮件地址传递给该方法

内部单击b发送\u单击事件

protected void btnSend_Click(object sender, EventArgs e)
{
     try
        {
            ...ALL THE PREVIOUS CODE...

                        mailMessage.Body = GenerateMessage(email);
                        mailMessage.BodyEncoding = Encoding.UTF8;
                        mailMessage.IsBodyHtml = true;

           ... REST OF THE CODE
        }
    catch()
    {}
 }

    private string GenerateMessage(string email)
    {
       var sb = new StringBuilder();
       sb.Append("<b>Email: </b>");
       sb.Append(string.Format("<br> {0} <br>",email));
       //.
       //.Rest of the stuff here
       //..
       return sb.ToString();
    }
----------更新------


}

在您的代码隐藏中,您需要清空foreach中的地址列表

试试这个

mailMessage.From = new System.Net.Mail.MailAddress(from);
mailMessage.To.Clear(); //empty list of address
mailMessage.To.Add(to);
mailMessage.Subject = "Test send email";
您可以在此处阅读对象MailAddressCollection:


希望我能帮到你。

一个建议是在try/catch块中使用局部变量来表示电子邮件、密码、收件人、发件人和邮件消息。另外,您使用的SMTP主机是什么?您确定没有收到以前测试的电子邮件吗?一些免费的SMTP主机像gmail一样运行缓慢。我使用我的提供商的SMTP是一种高效的服务。很抱歉,我不理解你关于使用局部变量的建议。使用控制台应用程序发送电子邮件,并在大约100个批次之间引入暂停。好的,第二个问题已经解决,但对于第一个问题,有什么想法吗?一个建议是根本不要使用任何try/catch块。特别是在扔掉内部异常时。我需要避免在收件人中附加电子邮件地址。。。在这一刻,我没有一封邮件一个收件人,我有一封邮件多个收件人…你想这些密码去所有的收件人???或者您正在尝试为每个收件人发送带有密码的电子邮件?我刚刚更新了答案,希望这就是你想要实现的
mailMessage.From = new System.Net.Mail.MailAddress(from);
mailMessage.To.Clear(); //empty list of address
mailMessage.To.Add(to);
mailMessage.Subject = "Test send email";