【问题标题】:Send Email in background process在后台进程中发送电子邮件
【发布时间】:2013-10-01 14:01:03
【问题描述】:

我有以下代码可以打开一个页面并向在课堂会话中注册的学生发送电子邮件,并附上他们的证书,生成电子邮件和证书都在不同的 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

【问题讨论】:

    标签: javascript asp.net vb.net email


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      example 那里有vbsamples

      【讨论】:

      • Task.Factory 可以工作,但我不在 4.0 中,还有其他建议吗?
      • 啊,明白了。 StuartLC 的解决方案会运作良好。基本上只是将其分离到另一个可以处理发送的线程中。
      【解决方案3】:

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

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

      在您的应用启动期间,例如在Application.Startglobal.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)
      

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

      【讨论】:

        猜你喜欢
        • 2014-01-01
        • 1970-01-01
        • 2017-10-23
        • 1970-01-01
        • 2011-09-13
        • 2013-10-07
        • 1970-01-01
        • 2015-03-08
        • 2011-07-11
        相关资源
        最近更新 更多