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

本文关键字:电子邮件 ASP Net4 使用 | 更新日期: 2023-09-27 18:20:52

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

教程是:http://www.c-sharpcorner.com/UploadFile/47548d/how-to-send-bulk-email-using-Asp-Net/

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

  1. firstEmail@domain.com
  2. secondEmail@domain.com

在这个测试中,我没有错误,因为电子邮件和密码对单个用户来说是正确的,但我有两个问题。

问题#1

  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);
        }
    }

如果有任何建议,我将不胜感激。

谢谢!

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

在代码后面,您需要清空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";

你可以在这里阅读对象邮件地址收集:

http://msdn.microsoft.com/it-it/library/system.net.mail.mailaddresscollection%28v=vs.110%29.aspx

希望我帮了你。

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

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

内部点击btnSend_click事件

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();
    }

----------------更新--------------

public class Message
{
    public string email { get; set; }
    public string password { get; set; }
}
protected void btnSend_Click(object sender, EventArgs e)
{
    try
    {
        var messages = new List<Message>();
        foreach (var grow in grvCustomers.Rows)
        {
            //by theway putting password like this in grid is a bad idea
            var email = grow.Cells[0].Text.Trim();
            var pwd = grow.Cells[1].Text.Trim();
            SendEmail(new Message { email = email, password = pwd });
        }
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    lbltotalcount.Text = string.Empty;
}
private void SendEmail(Message message)
{
    using (var smtpClient = new System.Net.Mail.SmtpClient())
    {
        using (var mailMessage = new System.Net.Mail.MailMessage())
        {
                mailMessage.Subject = "Test send email";
                mailMessage.From = new System.Net.Mail.MailAddress("account@domain.com");
                mailMessage.BodyEncoding = Encoding.UTF8;
                mailMessage.IsBodyHtml = true;
                mailMessage.Body = GenerateMessage(message);
                mailMessage.To.Add(message.email);
                smtpClient.Host = "localhost";
                smtpClient.Send(mailMessage);
            }
        }
    }
private string GenerateMessage(Message message)
{
    var sb = new StringBuilder();
    sb.Append("<b>Email: </b>");
    sb.Append(string.Format("<br> {0} <br>", message.email));
    sb.Append("<br>  " + message.password + "<br><br>");
    //.
    //.Rest of the stuff here
    //..
    return sb.ToString();
}

}