c# - 如何从 ASP.NET 发送大量电子邮件?

标签 c# .net asp.net multithreading email

我为客户建立了一个网站,他们想要一个定制的时事通讯工具。构建工具很简单,但我不确定如何发送电子邮件。

我设置了一个测试页面,并设法使用 System.Net.Mail 命名空间向自己发送了一封测试电子邮件。我尝试将这段代码应用到时事通讯页面上的一个循环中,但事实证明这是一项相当困难的任务。电子邮件发送循环会在发送电子邮件时锁定整个站点大约一个小时。有时它会中途中止循环,并且某些电子邮件不会发送。

我尝试在另一个线程上启动循环。

protected void btnSendNewsletter_Click(object sender, EventArgs e)
{
    Thread t = new System.Threading.Thread(new ThreadStart(SendEmails));
    t.Start();
}

但这仍然使网站变慢,并且有中途中止的习惯。群发邮件的常用方法是什么?我确定我没有做对。

我对 .NET 中的电子邮件领域还很陌生。

最佳答案

对于此类任务,您最好将一堆作业添加到队列中。然后运行一个线程,从队列中提取 x 个作业,处理它们(即发送电子邮件),然后休眠一段时间。这将为您的 Web 应用程序提供一些喘息的空间。

如果您使用的是数据库,则可以创建电子邮件队列表来存储作业。我更喜欢使用这种存储而不是内存,以防应用程序由于某种原因回收或抛出异常......至少你可以从你离开的地方继续。

通常,运行工作线程的进程不会是网络应用程序本身。这将是一个 Windows 服务或类似的东西。如果您使用的是共享主机,这可能无法实现。

关于c# - 如何从 ASP.NET 发送大量电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902643/

相关文章:

c# - 嵌套的 LINQ 查询,错误信息

c# - 在教新开发人员时,我应该从单元测试开始吗?

c# - 如何使属性对 .NET DLL 中的 COM 可见(方法确实有效)

c# - 如何通过 javascript 填充 asp 下拉列表?

.net - 用于删除由有序字符集组成的嵌套括号的平衡匹配正则表达式是什么?

c# - NetStandard/Net Framework 引用 hell

c# - 使用反射获取结构中的结构

c# - 选择 XML 节点的内部文本并添加到列表

asp.net - 如何在一个asp.net页面中处理多个表单

.net - Viewstate 隐藏字段如此之大,以至于一切都崩溃了