使用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/
在用户测试表中,我现在有两封电子邮件:
- 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);
}
}
如果有任何建议,我将不胜感激。
谢谢!
在代码后面,您需要清空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();
}
}