C# 使用mvcmailer发送多封电子邮件

C# 使用mvcmailer发送多封电子邮件,c#,asp.net-mvc,email,razor,mvcmailer,C#,Asp.net Mvc,Email,Razor,Mvcmailer,我期待着使用asp.net mvc 3和razor发送电子邮件。也提到 它看起来相当直截了当,但我不知道如何发送批量电子邮件,例如向用户列表发送时事通讯 我是否围绕此创建一个循环 public virtual MailMessage Welcome() { var mailMessage = new MailMessage{Subject = "Welcome to MvcMailer"}; mailMessage.To.Add("sohan39@example.com");

我期待着使用asp.net mvc 3和razor发送电子邮件。也提到

它看起来相当直截了当,但我不知道如何发送批量电子邮件,例如向用户列表发送时事通讯

我是否围绕此创建一个循环

public virtual MailMessage Welcome()
{
    var mailMessage = new MailMessage{Subject = "Welcome to MvcMailer"};

    mailMessage.To.Add("sohan39@example.com");
    ViewBag.Name = "Sohan";
    PopulateBody(mailMessage, viewName: "Welcome");

    return mailMessage;
}
有人能解释一下吗?
谢谢

如果您希望每封电子邮件都有不同的内容,则需要使用循环创建单个的
MailMessage
对象。如果您想要相同的内容,则只需添加多个收件人:

mailMessage.To.Add("sohan39@example.com");
mailMessage.To.Add("peter23@example.com");

不幸的是,因为每封邮件都是个性化的,所以除了循环外,我看不到其他任何方式。因此,只需将您的方法更改为:

public virtual MailMessage Welcome(string email, string name)
{
    var mailMessage = new MailMessage{Subject = "Welcome to MvcMailer"};

    mailMessage.To.Add(email);
    ViewBag.Name = name;
    PopulateBody(mailMessage, viewName: "Welcome");

    return mailMessage;
}
然后在循环中调用该方法并同时发送

重要提示

您应该将web.config设置为使用分拣目录,而不是SMTP服务器。然后让IIS从收件目录发送电子邮件

推理-因为您可能会调用
SmtpClient.Send(MailMessage)
任意次数-如果您每次都必须连接到SMTP服务器才能发送电子邮件,这可能会变得相当昂贵


这样做的一个很好的副作用是,如果SMTP服务器因任何原因关闭或无法访问,您也会得到一些冗余。

如果我使用循环,则返回将在一条消息之后突然出现,对吗?循环需要超出方法的范围。如果没有调用此方法的代码,很难说-我不知道电子邮件实际发送到哪里。我在共享服务器上,所以我想收件目录建议不起作用?在这种情况下,最好是异步发送?是的,好主意。这段视频可能会对你有所帮助。为了实现冗余,您可以将电子邮件扔到数据库中,然后在发送后,将其标记为已在数据库中发送。然后创建一些管理工具,尝试重新发送所有未发送的电子邮件。