使用 MVC Mailer 发送多封电子邮件

4
我想使用MVCMailer在asp.net mvc 3中使用razor发送电子邮件。ScottHa也提到过。
看起来相当简单,但我不确定如何发送批量电子邮件,例如像通讯录一样发送给一组用户。
我需要在这个周围创建一个循环吗?
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;
}

有人能解释一下吗? 谢谢

2个回答

2

很不幸,由于每个电子邮件都是个性化的,我无法看到除循环以外的其他方法。因此,请将您的方法更改为以下内容:

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 mailmessage)任意次数 - 如果每次都连接到SMTP服务器发送电子邮件,这可能变得非常昂贵。

这样做的一个好处是,如果SMTP服务器由于任何原因下线或无法访问,您也可以获得一些冗余。


我在一个共享服务器上,所以我猜取件目录的建议不起作用?如果是这样的话,最好是异步发送吗? - raklos
好的,不错的想法。这个视频可能会对你有所帮助:http://www.asp.net/general/videos/how-do-i-send-email-asynchronously-with-aspnet。为了冗余性,你可以将电子邮件消息放入数据库中,然后在发送后将它们标记为已发送。然后创建一些管理员工具来尝试重新发送所有未发送的电子邮件。 - Charlino

1

如果您想为每个电子邮件提供不同的内容,您需要使用循环创建单独的MailMessage对象。如果您希望使用相同的内容,则可以添加多个收件人:

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

如果我在循环中使用return,那么返回值将会在输出一条消息后就跳出循环是吗? - raklos
循环需要放在方法之外。没有调用此方法的代码,很难说 - 我不知道电子邮件实际上是在哪里发送的。 - Danny Tuppeny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接