在后台进程中发送电子邮件
Send Email in background process
我有以下代码,用于打开一个页面,并使用附加的证书向在课堂会话中注册的学生发送电子邮件,生成电子邮件和证书都在不同的 aspx 页面中工作。现在,我想生成相同的过程,而无需用户等待所有电子邮件发送完毕,我将在此过程中添加其他代码以在有任何问题时通知我。谁能指出我实现这一目标的正确方向。我已经阅读了几个论坛,但大多数情况下我发现 Windows 服务是一种选择 IMO 它有点过杀了。我感谢任何建议
提前感谢,
担
Protected Sub lbEmailOLetter_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbEmailOLetter.Click
Dim id As Integer
id = hfSessionID.Value
If id > 0 Then
Try
HttpContext.Current.Server.Execute("Email.aspx?SessID=" & id, False)
HttpContext.Current.ApplicationInstance.CompleteRequest()
Catch ex As Exception
lMessage.Text = "Could not send email with attachment."
End Try
Else
lMessage.Text = "Must create and save a session in order send letter by email."
End If
End Sub
您可以在服务器上运行一个单独的服务,您可以在其中发送要在队列中发送的邮件的电子邮件 ID,以便该服务将异步处理该过程。
查看 Task.Factory 以将此任务拆分到另一个线程中
例那里有 vbsamples
您应该查看 .Net 中的生产者/使用者模式,特别是在使用任务并行库时。
我建议使用一个共享(静态)BlockingCollection
(bc
)容器,对电子邮件(mailItem
)的内容进行建模,由默认ConcurrentQueue
支持。
启动应用程序期间,例如在Application.Start
global.asax
中,放置当前Email.aspx
页面用于发送电子邮件的代码,但它只是循环浏览排队的邮件项目(如果目前没有,它将阻止)。
后台工作线程将如下所示:
For Each mailItem In bc.GetConsumingEnumerable()
... send mail (Code from `Email.aspx`)
Next
然后在需要排队要发送的电子邮件的页面上:
Dim mailItem as new MailItem()
mailItem.To = "mickey@mouse.com"
mailItem.Subject = ...
bc.Add(mailItem)
当每个邮件项目被放入队列时,后台线程将处理它。
相关文章:
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 使用angularjs验证文本框中的电子邮件
- 使用正则表达式评估电子邮件地址时出现性能问题
- javascript中添加验证电子邮件的问题
- 如何在收到电子邮件时自动调用脚本
- 获取屏幕截图并在电子邮件中发送的按钮
- 将项目履行与高级模板合并,并通过电子邮件发送至Netsuite 2.0
- php&js-将电子邮件添加到输入文本中
- 将用户制作的SVG(raphael.js)发送到服务器(php),以便通过电子邮件发送
- 以PDF附件的形式通过电子邮件发送谷歌文档
- 将Meteor中的base64 PDF作为电子邮件附件
- 来自现场目的的Meteor电子邮件.send()
- 根据部门用户的选择,接收来自多个电子邮件地址的Wordpress Contactform7查询
- Javascript/Ajax:通过点击按钮检查有效的电子邮件和电话号码
- 如果填写了特定值,则通过电子邮件发送电子表格中的数据
- 窗口提醒或类似内容中的电子邮件表单
- 通过phonegap中的电子邮件发送存储在html5 localStorage中的信息
- 电子邮件地址验证但创建帐户,即使电子邮件地址无效
- 在后台进程中发送电子邮件
- 当Google Script检测到后台的更改(如cron)时,它是如何发送电子邮件的