在我正在处理的博客中,每当用户发布文章的评论时,我都希望向所有其他用户发送电子邮件。在这种情况下,同步或异步发送邮件的最佳方式是什么?任何人都可以共享一个代码段,用于使用.NET中的System.Net.Mail向用户列表发送电子邮件。
答案 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
进行身份验证,可以找到更多信息here或here。
同步发送?嗯,这取决于你必须发送多少。这可能很费时间
在我必须发送批量电子邮件并且我不想挂起我的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();
<强> MassMailer.NET 强>
查看此帖子,了解如何发送大量电子邮件的example。