在c#.net windows应用程序中发送批量电子邮件
本文关键字:电子邮件 net windows 应用程序 | 更新日期: 2023-09-27 18:21:05
我的项目是每小时至少发送100封邮件。
我使用for循环从数据库中检索电子邮件,并逐个发送电子邮件。
但当我在谷歌上搜索时,我发现它会在一段时间后超时。那么,使用什么方法来保持邮件发送一段时间,然后从保持位置重新启动循环呢。此外,如果发送失败,我应该重新发送。我应该使用定时器吗?
请给我任何完成这个的想法。
我的样本代码,
List<string> list = new List<string>();
String dbValues;
foreach (DataRow row in globalClass1.dtgrid.Rows)
{
//String From DataBase(dbValues)
dbValues = row["email"].ToString();
list.Add(dbValues);
}
using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(mailserver, port))
{
client.Credentials = new System.Net.NetworkCredential(emailfrom, password);
client.EnableSsl = true;
MailMessage msg1 = new MailMessage();
foreach (string row in list)
{
if (row != null)
{
msg1=sendmail(row);
client.Send(msg1);
client.Dispose();
}
}}
选项1
您可以简单地将Add
多个收件人MailMessage
:的To
属性
var mail = new MailMessage();
mail.To.Add(new MailAddress("to@example.com"));
例如,当您有一个包含收件人的list
时,您可以添加主题all:
var mail = new MailMessage();
foreach (var item in list)
{
mail.To.Add(new MailAddress(item));
}
mail.From = new MailAddress("from@example.com");
mail.Subject = "Subject";
mail.Body = "Body";
client.Send(mail);
选项2
如果你不想使用To
或Bcc
设置所有地址,你可以使用Task
以这种方式发送电子邮件:
public void SendMails(List<string> list)
{
Task.Run(() =>
{
foreach (var item in list)
{
//Put all send mail codes here
//...
//mail.To.Add(new MailAddress(item));
//client.Send(mail);
}
});
}
选项3
您也可以使用SendMailAsync
发送邮件。
感谢Panagiotis Kanavos
提到,这种方式比使用Task.Run
更可取。
您应该使用pickup目录异步发送它们。这是一个很好的概述。http://weblogs.asp.net/gunnarpeipman/asp-net-using-pickup-directory-for-outgoing-e-mails
SMTP服务器处理暂时的网络连接问题,并定期重试。