`
pcajax
  • 浏览: 2189163 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
客户要求为他的网站注册用户群发邮件
网站注册用户有9860名,因为注册时需要用户必须提供电子邮件,因为要对所有的9860名用户发送
如果采用主线程发送,必然造成连接超时或是漫长的用户等待,因而采用了异步发送的方式处理此群发
于是最初写了一个群发的类

<!--<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 StringByVal 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会话变量丢失,从而造成群发操作直接结束
后修改类

 


<!--<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 StringByVal 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()
分享到:
评论

相关推荐

    Vue3学习ddddddddd

    Vue3学习ddddddddd

    my-pg.rar_ddddddddd XXXX

    标题 "my-pg.rar_ddddddddd XXXX" 暗示这是一个包含编程相关资源的压缩文件,可能是一个项目或教程的集合。描述提到 "most of the programs are for data structure",说明这个压缩包中的主要内容是关于数据结构的...

    matlab基础语法ddddddddd

    - **`linspace`**:生成一个等差序列的一维矩阵,例如生成从0到10的五个数的等差序列: ```matlab c = linspace(0,10,5); ``` - **特殊矩阵**: - **单位阵**:生成一个单位矩阵,即对角线上元素为1,其余位置为...

    西游识字ddddddddd

    《西游识字ddddddddd》是一款以中国古代经典名著《西游记》为背景的教育应用程序,旨在帮助儿童通过趣味学习方式认识汉字。虽然该应用目前处于未完工状态,但我们可以从其“android”标签推测它是一款面向Android...

    中国社会文化转型综论

    中国社会文化转型综论,内容很详尽ddddddddd

    BaiduHi_4.1_Beta.exe

    很强大的软件,百度开发,、。。。ddddddddd

    前端面试题整理

    整理的一份关于 前端面试 html css js 的文档 ddddddddd

    用javascript关闭本窗口技巧小结_.docx

    首先,我们来看一个常见的方法,但这种方法在Internet Explorer(IE)中可能会出现问题。在IE中,当尝试关闭非通过`window.open()`打开的窗口时,会弹出一个确认对话框询问用户是否关闭。为避免这种情况,可以使用...

    HiJson-64-32

    HiJson 里面包含64和32位的点击既能使用,用于解析json字符串,让结果整体更加清晰明了DDDDDDDDD

    将度分(ddmm.mmmm)的坐标转换为常用坐标(dd.ddddd)

    GNSS NMEA 格式的坐标(ddmm.mmmmm)转换为原始 GPS 格式

    台湾新代系统PLC编程软件 免安装版本

    用户可以通过软件实时监控PLC的状态,查看输入输出信号的变化,检查程序执行情况,定位并解决问题。此外,软件可能还具备模拟运行功能,允许用户在不实际连接硬件的情况下预览程序效果,进一步提高调试效率。 PLC...

    csv文件读下用的jar包

    String[] contents = {"aaaaa","bbbbb","cccccc","ddddddddd","不知道中文会不会乱码呢"}; //这个只是测试数据,具体要怎么样的形式保存待定 wr.writeRecord(contents); wr.close(); } catch ...

    spi2wb:用SPI总线驱动Wishbone主总线

    spi2wb 用SPI总线驱动Wishbone主总线。 协议 如下: 模式b01-&gt; CPOL = 0 CPHA = 1 CS =低电平有效 spi2wb帧的组成如下: 8位模式 写框: MOSI : 1AAAAAAA DDDDDDDD ...MISO : ZZZZZZZZ DDDDDDDDD

    struts2 标签库中文版

    例如,`&lt;bean:cookie id="myCookie" name="tags/cookiedemo" value="ddddddddd"&gt;`,然后使用`&lt;bean:write&gt;`标签输出其`name`和`value`属性。 - `&lt;bean:header&gt;`:通过`id`和`name`属性获取HTTP请求头信息,如`...

    loran2.rar_matlab例程_matlab_

    4. **MATLAB编程**:通过amirkabir_loran.m和ddddddddd.m这两个文件,我们可以学习到MATLAB的编程技巧,它们可能包含了辅助函数或者特定的算法实现。 5. **数据分析与可视化**:MATLAB的强大在于数据处理和可视化,...

    struts1-bean标签

    &lt;bean:cookie id="myCookie" name="tags/cookiedemo" value="ddddddddd"/&gt; (); String value = myCookie.getValue(); out.println("this cookie name is " + name + ", value is " + value + ""); %&gt; ``` ...

    DDDDDDDDDDDDDDDD

    DDDDDDDDDDDDDDDDDDDD

    烁空精简版新闻系统(含源码)

    dddddddddddddddddddd

    mjhfhdfbdz

    ghklg,cxbfbcxzc fffffffz

    RtNavi.rar

    Format = ddddddddd X = 340 Y = 10 Width = 168 Interval = 1000 Size = 36 Weight = 700 CreateFont #--------------------------------- #--------------------------------- ICONXPBUTTON x = 10 y = 420 ...

Global site tag (gtag.js) - Google Analytics