从ASP.NET发送批量电子邮件

时间:2011-05-31 08:42:20

标签: asp.net email smtp

在我正在处理的博客中,每当用户发布文章的评论时,我都希望向所有其他用户发送电子邮件。在这种情况下,同步或异步发送邮件的最佳方式是什么?任何人都可以共享一个代码段,用于使用.NET中的System.Net.Mail向用户列表发送电子邮件。

6 个答案:

答案 0 :(得分:1)

您可能希望使用单独的网络服务来发送电子邮件。您的应用程序会将正文和电子邮件列表发送到Web服务。您可以使用gzip或zip压缩。这将使web服务调用非常有效(70%+压缩,因为数据是文本)。

现在,在网络服务中,您可以使用多线程或异步操作来发送电子邮件。

编辑:如果您有专用服务器,那么制作Windows服务可能是更好的选择。在sql server,Queued Emails和Send Emails(Archive)中创建两个表。因此,每当用户发布评论时,请更新“排队的电子邮件”表。现在,Windows服务可以每30秒唤醒一次,从排队的电子邮件中提取所有行,并异步发送所有这些行。发送电子邮件后,从表中移动/删除该行。

答案 1 :(得分:0)

看看这个

Sending Email with System.Net.Mail

MailMessage message = new MailMessage();
message.From = new MailAddress("sender@foo.bar.com");

message.To.Add(new MailAddress("recipient1@foo.bar.com"));
message.To.Add(new MailAddress("recipient2@foo.bar.com"));
message.To.Add(new MailAddress("recipient3@foo.bar.com"));

message.CC.Add(new MailAddress("carboncopy@foo.bar.com"));
message.Subject = "This is my subject";
message.Body = "This is the content";

SmtpClient client = new SmtpClient();
client.Send(message);

答案 2 :(得分:0)

MailMessage message = new MailMessage();

message.From = new MailAddress("sender@foo.bar.com");

message.To.Add(new MailAddress("recipient1@foo.bar.com"));
message.To.Add(new MailAddress("recipient2@foo.bar.com"));

message.CC.Add(new MailAddress("carboncopy@foo.bar.com"));

message.Subject = "This is my subject";
message.Body = "This is the content";

SmtpClient client = new SmtpClient();

client.Send(message);

如果您需要使用NetworkCredential进行身份验证,可以找到更多信息herehere。 同步发送?嗯,这取决于你必须发送多少。这可能很费时间 在我必须发送批量电子邮件并且我不想挂起我的Web服务器的情况下,我开发了一个定制的Windows服务,它会定期扫描数据库,收集信息并发送电子邮件。

答案 3 :(得分:0)

我用它来异步发送邮件

SmtpClient smtp = new SmtpClient();
foreach(var mail in mailsToSend)
{
   new Thread(() =>
   {
      smtp.Send(mail);
   }
   ).Start();
}

答案 4 :(得分:0)

如果您正在考虑第三方服务,那么有关Amazon's SES Email using .NET入门的文章很不错。

这对我来说效果很好,但请注意,SendGrid刚宣布新的定价等于亚马逊的SES,SendGrid包含一个SMTP包装器,因此代码更简单。

答案 5 :(得分:0)

我发布了另一个StackOverflow答案,解决了发送大量电子邮件的问题,可以通过clicking here找到。

当然最好以异步方式发送电子邮件,以便能够最大化在固定时间范围内发送的电子邮件数量。您可以自己执行此操作,也可以使用已编写的组件来执行此操作。

我使用Fluent.NET Mail构建和发送单个电子邮件,并使用MassMailer.NET发送大量电子邮件。

Fluent.NET Mail

new Mail()
    .Html(new MessageTemplate()
       .FromText("This is my email with {content} text")
       .DataFrom(new { content = "html" })
       .BetweenBraces())
    .To(new MailBox(emailAddress))
    .From(new MailBox(emailAddress))
    .Subject("Fluent API .NET 2")
    .Timeout(5000)
    .SmtpServer("[your smtp server]")
    .SendAsync();

Check out the post.

<强> MassMailer.NET

查看此帖子,了解如何发送大量电子邮件的example