你如何从ASP.NET发送大量电子邮件?
我为客户建立了一个网站,他们想要一个自定义的时事通讯工具。 构建工具很简单,但我不确定如何发送电子邮件。
我设置了一个测试页面,并设法使用System.Net.Mail命名空间向我自己发送测试电子邮件。 我尝试将此代码应用于简报页面上的循环,但结果却是一项相当困难的任务。 电子邮件发送循环在发送电子邮件时将整个站点锁定大约一个小时。 有时它会中途中止循环,一些电子邮件将不会被发送。
我尝试在另一个线程上启动循环。
protected void btnSendNewsletter_Click(object sender, EventArgs e) { Thread t = new System.Threading.Thread(new ThreadStart(SendEmails)); t.Start(); }
但这仍然使网站变得缓慢,并且还有一种中途流产的习惯。 发送群发电子邮件的常用方法是什么? 我敢肯定我做得不对。
我对.NET中的电子邮件领域非常陌生,因此非常感谢任何帮助。
对于这种任务,您最好将一堆作业添加到队列中。 然后运行一个线程,从队列中提取x个作业,处理它们(即发送电子邮件),然后hibernate一段时间。 这将为您的web应用程序提供一些喘息空间。
如果您正在使用数据库,则可以创建电子邮件队列表来存储作业。 我喜欢在内存中使用这种存储,因为某些原因导致应用程序回收或抛出exception……至少你可以从你离开的地方接收。
通常,运行工作线程的进程不是Web应用程序本身。 它将是一个Windows服务或类似的东西。 如果您在共享主机上,这可能是不可能的。
- 在.NET中使用String.GetHashCode()的哈希质量和稳定性?
- MediaCapture Windows 8桌面应用程序 – 无法使其正常工作
- Parallel.ForEach()更改模拟上下文
- Silverlight从’哑’服务器加载参考数据点播
- 从异步中捕获未处理的exception
- 即使没有异步,CallContext.LogicalGetData也会被恢复。 为什么?
- 为什么((object)(int)1).Equals(((object)(ushort)1))产生错误?
- 在DataGridViewComboBoxColumn SelectedIndexChanged期间触发的事件
- 将Azure ServiceBus上的消息从.NET Core发送器发送到.NET 4.6处理程序