客户要求为他的网站注册用户群发邮件
网站注册用户有9860名,因为注册时需要用户必须提供电子邮件,因为要对所有的9860名用户发送
如果采用主线程发送,必然造成连接超时或是漫长的用户等待,因而采用了异步发送的方式处理此群发
于是最初写了一个群发的类
Code
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->群发邮件处理类#Region "群发邮件处理类"
/**/''' <summary>
''' 邮件群发异步处理类
''' </summary>
<Serializable()> _
Public Class BulkMailClass BulkMail

    Private _maxCount As Integer = 0
    Private _currentCount As Integer = 0
    Private _runState As BulkMailRunState = BulkMailRunState.Unkonw
    Private _message As String

    Private _list As List(Of Entity.Member.OwnerIdentityEntity)

    Private _thread As Threading.Thread

    Private _mailSubject As String
    Private _mailBody As String

    Private _config As Web.Config.WebConfig


    /**/''' <summary>
    ''' 创建一个邮件群发实例 <see cref="BulkMail" /> 
    ''' </summary>
    ''' <param name="subject">邮件主题</param>
    ''' <param name="body">邮件内容</param>
    Public Sub New()Sub New(ByVal subject As String, ByVal body As String)
        _config = Web.Config.WebConfig.GetConfig
        _mailSubject = subject
        _mailBody = body
    End Sub

    /**/''' <summary>
    ''' 初始化发送事件
    ''' </summary>
    ''' <param name="list">信息集合</param>
    Public Sub Send()Sub Send(ByVal list As List(Of Entity.Member.OwnerIdentityEntity))
        _list = list
       _thread = New Threading.Thread(New Threading.ThreadStart(AddressOf Me.SendMail))
       _thread.Start()
    End Sub

    /**/''' <summary>
    ''' 异步发送邮件
    ''' </summary>
    Private Sub SendMail()Sub SendMail()
        Try

            _message = "群发开始"
            _runState = BulkMailRunState.Run
            _currentCount = 0
            _maxCount = _list.Count


            Dim mail As Web.Mail.Mail
            mail = New Web.Mail.Mail
            mail.From = _config.SmtpEmail
            mail.FromName = _config.SiteName
            mail.isHtml = True
            mail.Priority = "high"

            mail.Subject = _mailSubject
            mail.Body = _mailBody

            Dim smtp As Web.Mail.SmtpMail
            smtp = New Web.Mail.SmtpMail
            smtp.chkSmtp = _config.SmtpAuth
            smtp.smtpPassWord = _config.SmtpLoginPassword
            smtp.SmtpPort = _config.SmtpPort
            smtp.SmtpServer = _config.SmtpServer
            smtp.smtpUserName = _config.SmtpLoginName


            For Each info As Entity.Member.OwnerIdentityEntity In _list
                _currentCount += 1
                If info.Email IsNot Nothing AndAlso info.Email.Contains("@") Then
                    mail.Recipient.Add(info.Email)
                    _message = String.Format("正在给{0}发送邮件", info.RealName)
                    _runState = BulkMailRunState.Run

                    mail.Subject = _mailSubject
                    mail.Body = _mailBody

                    smtp.Send(mail)
                    mail.Recipient.Clear()
                End If
            Next


            _runState = BulkMailRunState.Over
            _message = "群发结束"


        Catch ex As Exception
            _runState = BulkMailRunState.Error
            _message = ex.Message & ex.Source & ex.ToString & ex.InnerException.ToString

        End Try

    End Sub

 

自定义属性#Region "自定义属性"
    /**/''' <summary>
    ''' 群发状态
    ''' </summary>
    ''' <value>The state of the run.</value>
    Public ReadOnly Property RunState()Property RunState() As BulkMailRunState
        Get
            Return _runState
        End Get
    End Property
    /**/''' <summary>
    ''' 群发邮件总数
    ''' </summary>
    ''' <value>The max count.</value>
    Public ReadOnly Property MaxCount()Property MaxCount() As Integer
        Get
            Return _maxCount
        End Get
    End Property
    /**/''' <summary>
    ''' 已发送数量
    ''' </summary>
    ''' <value>The current count.</value>
    Public ReadOnly Property CurrentCount()Property CurrentCount() As Integer
        Get
            Return _currentCount
        End Get
    End Property
    /**/''' <summary>
    ''' 附加的信息
    ''' </summary>
    ''' <value>The message.</value>
    Public ReadOnly Property Message()Property Message() As String
        Get
            Return _message
        End Get
    End Property
#End Region
End Class

然后把访类的实例存储在Session会话中,在客户端刷新读取发送进度并显示,在本地测试成功,于是发布到服务器上
客户发送邮件时反馈没有出现进度条,而是直接显示群发完成,但注册会员并未收到邮件
后测试发现是因为群发类把所有的信息存储在Session中,其中也包含了所有的会员信息,由于数据量极大,造成Sesson会话变量丢失,从而造成群发操作直接结束
后修改类

Code
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->

群发邮件处理类#Region "群发邮件处理类"
/**/''' <summary>
''' 邮件群发异步处理类
''' </summary>
<Serializable()> _
Public Class BulkMailClass BulkMail

    Private _maxCount As Integer = 0
    Private _currentCount As Integer = 0
    Private _runState As BulkMailRunState = BulkMailRunState.Unkonw
    Private _message As String

    Private _thread As Threading.Thread

    Private _mailSubject As String
    Private _mailBody As String

    Private _config As Web.Config.WebConfig


    /**/''' <summary>
    ''' 创建一个邮件群发实例 <see cref="BulkMail" /> 
    ''' </summary>
    ''' <param name="subject">邮件主题</param>
    ''' <param name="body">邮件内容</param>
    Public Sub New()Sub New(ByVal subject As String, ByVal body As String)
        _config = Web.Config.WebConfig.GetConfig
        _mailSubject = subject
        _mailBody = body
    End Sub

    /**/''' <summary>
    ''' 初始化发送事件
    ''' </summary>
    ''' <param name="list">信息集合</param>
    Public Sub Send()Sub Send(ByVal list As List(Of Entity.Member.OwnerIdentityEntity))
        _thread = New Threading.Thread(AddressOf Me.SendMail)
        _thread.Start(list)
    End Sub

    /**/''' <summary>
    ''' 异步发送邮件
    ''' </summary>
    Private Sub SendMail()

asp.net 异步群发邮件时遭遇到的问题 ddddddddd相关推荐

  1. asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站

    asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站 2011年09月01日 客户要求为他的网站注册用户群发邮件 网站注册用户有9860名,因为注册时需要用户必须提 ...

  2. Asp.Net异步页面处理(转)

    原文地址: http://www.blogcn.com//User8/flier_lu/blog/27401974.html 与 ASP.NET 1.0 相比,ASP.NET 2.0 的各方面改进可以 ...

  3. 详解 ASP.NET异步

    在前文中,介绍了.NET下的多种异步的形式,在WEB程序中,天生就是多线程的,因此使用异步应该更为谨慎.本文将着重展开ASP.NET中的异步. [注意]本文中提到的异步指的是服务器端异步,而非客户端异 ...

  4. php邮箱群发,php异步群发邮件

    原标题:php异步群发邮件 当程序执行群发邮箱的时候,会出现等待程序反馈时间太长 这对于用户体验来说是很不好的,用户大多会在程序没有执行完就关闭程序,这样发送邮件也会中断,所以我们的解决思路应该是用异 ...

  5. ASP.Net TextBox只读时不能通过后台赋值取值

    ASP.Net TextBox只读时不能通过后台赋值取值 今天在开发一个asp.net的页面遇到了TextBox设置了ReadOnly属性,在js中赋值后,后台代码取不到值的情况,经过在网上查找,找到 ...

  6. Inside ASP.NET 2.0-即时编译系统

     Inside ASP.NET 2.0-即时编译系统      Inside ASP.NET 2.0-即时编译系统 文/ 黄忠成(原文刊登于Run! PC) 从ASP.NET 1.1 到2.0,编译系 ...

  7. 转:关于ASP操作Access数据库时出现死锁.ldb的解决方法

    Asp操作Access数据库时出现死锁.ldb导致网站访问缓慢的问题描述 最近asp网站出现数据库错误,在ftp登陆后发现原来的后缀MDB文件多了一个后缀LDB文件,是自动被锁,在一天某个时间段内打不 ...

  8. multisim安装后无法连接数据库_计算机重装系统时遭遇错误意外重启后无法安装,这是什么原因?...

    展开全部 大家好,我是大明,计算机重装系统时遭遇"错误意外重启后无法安装"提示其实并不多见e68a8462616964757a686964616f31333433653934,那么 ...

  9. Flink 异步IO时 java.util.concurrent.TimeoutException: Async function call has timed out.

    Flink 异步IO时 timeout报错 java.lang.Exception: An async function call terminated with an exception. Fail ...

最新文章

  1. 使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇
  2. max格式转obj小工具_PDF文件转JPG等图片格式的小工具
  3. java rocketmq消费_rocketmq消费负载均衡--push消费详解
  4. 1.Linux下libevent和memcached安装
  5. 数据库-设置mysql编码
  6. Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
  7. vs2019Linux守护,Visual Studio 2019将支援Ninja显着提升Linux专案建置效率
  8. java中的关键事件是_java – 自定义关键事件
  9. bzoj2242 [SDOI2011]计算器 exgcd+ksm+bsgs
  10. 堆内存里的各种奇怪填充值
  11. Map.getOrDefault()的返回类型问题
  12. 《企业软件交付:敏捷与高效管理精要》——2.2 MyCo公司和MyProj企业软件交付项目...
  13. Zabbix 监控之 修改管理员用户密码
  14. html5中web存储(localStorage、sessionStorage)与cookie的区别?????
  15. Vb.net遍历一个窗口中的所有某类对象 (窗体中的控件) 的方法
  16. java关键字与解释_Java关键字及作用解释
  17. 警告warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  18. 抖音autojs 云控脚本源码
  19. 大数据笔记--Hadoop(第二篇)
  20. 【Pranet】论文及代码解读(RFB与aggregation部分)——Cavy岚

热门文章

  1. 数论 —— 最大公约数与最小公倍数
  2. 理论基础 —— 排序 —— 归并排序
  3. 第n小的质数(信息学奥赛一本通-T1099)
  4. 信息学奥赛C++语言:换钱
  5. 10 WM配置-主数据-定义仓位类型(Bin Type)
  6. 6 SD配置-企业结构-定义-定义装运点
  7. vendor自动恢复_push文件到system分区,重启后文件会被自动恢复
  8. android h5 ftp,HBuilderX ftp插件使用教程
  9. C++:函数指针是个什么玩意儿?
  10. python找图是什么模块-python中模块查找的原理与方法详解