在后台进程中发送电子邮件

时间:2013-09-25 19:54:59

标签: javascript asp.net vb.net email

我有以下代码打开一个页面,并向在课程会话中注册的学生发送电子邮件及其附加证书,生成电子邮件和证书,所有这些都在不同的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

3 个答案:

答案 0 :(得分:0)

您可以在服务器上运行单独的服务,您可以在其中发送要在队列中发送邮件的电子邮件ID,以便服务以异步方式处理该过程。

答案 1 :(得分:0)

查看Task.Factory以将此任务转移到另一个线程

example 那里有vbsamples

答案 2 :(得分:0)

您应该查看Producer / Consumer patterns in .Net,特别是在使用任务并行库时。

我建议使用模拟电子邮件内容(bc)的类的共享(静态)BlockingCollectionmailItem)容器,由默认ConcurrentQueue支持

在启动您的应用程序时,例如在Application.Start的{​​{1}}中,放置当前global.asax页面发送电子邮件的代码,但它只是循环遍历排队的邮件项目(如果没有,则会阻止力矩)。

后台工作线程看起来像:

Email.aspx

然后在需要对要发送的电子邮件进行排队的页面上

For Each mailItem In bc.GetConsumingEnumerable()
  ... send mail (Code from `Email.aspx`)
Next

当每个mailItem被放入队列时,后台线程将处理它。