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

在c#.net windows应用程序中发送批量电子邮件

选项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

如果你不想使用ToBcc设置所有地址,你可以使用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服务器处理暂时的网络连接问题,并定期重试。