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 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会话变量丢失,从而造成群发操作直接结束
后修改类
<!--<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相关推荐
- asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站
asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站 2011年09月01日 客户要求为他的网站注册用户群发邮件 网站注册用户有9860名,因为注册时需要用户必须提 ...
- Asp.Net异步页面处理(转)
原文地址: http://www.blogcn.com//User8/flier_lu/blog/27401974.html 与 ASP.NET 1.0 相比,ASP.NET 2.0 的各方面改进可以 ...
- 详解 ASP.NET异步
在前文中,介绍了.NET下的多种异步的形式,在WEB程序中,天生就是多线程的,因此使用异步应该更为谨慎.本文将着重展开ASP.NET中的异步. [注意]本文中提到的异步指的是服务器端异步,而非客户端异 ...
- php邮箱群发,php异步群发邮件
原标题:php异步群发邮件 当程序执行群发邮箱的时候,会出现等待程序反馈时间太长 这对于用户体验来说是很不好的,用户大多会在程序没有执行完就关闭程序,这样发送邮件也会中断,所以我们的解决思路应该是用异 ...
- ASP.Net TextBox只读时不能通过后台赋值取值
ASP.Net TextBox只读时不能通过后台赋值取值 今天在开发一个asp.net的页面遇到了TextBox设置了ReadOnly属性,在js中赋值后,后台代码取不到值的情况,经过在网上查找,找到 ...
- Inside ASP.NET 2.0-即时编译系统
Inside ASP.NET 2.0-即时编译系统 Inside ASP.NET 2.0-即时编译系统 文/ 黄忠成(原文刊登于Run! PC) 从ASP.NET 1.1 到2.0,编译系 ...
- 转:关于ASP操作Access数据库时出现死锁.ldb的解决方法
Asp操作Access数据库时出现死锁.ldb导致网站访问缓慢的问题描述 最近asp网站出现数据库错误,在ftp登陆后发现原来的后缀MDB文件多了一个后缀LDB文件,是自动被锁,在一天某个时间段内打不 ...
- multisim安装后无法连接数据库_计算机重装系统时遭遇错误意外重启后无法安装,这是什么原因?...
展开全部 大家好,我是大明,计算机重装系统时遭遇"错误意外重启后无法安装"提示其实并不多见e68a8462616964757a686964616f31333433653934,那么 ...
- 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 ...
最新文章
- 使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇
- max格式转obj小工具_PDF文件转JPG等图片格式的小工具
- java rocketmq消费_rocketmq消费负载均衡--push消费详解
- 1.Linux下libevent和memcached安装
- 数据库-设置mysql编码
- Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程
- vs2019Linux守护,Visual Studio 2019将支援Ninja显着提升Linux专案建置效率
- java中的关键事件是_java – 自定义关键事件
- bzoj2242 [SDOI2011]计算器 exgcd+ksm+bsgs
- 堆内存里的各种奇怪填充值
- Map.getOrDefault()的返回类型问题
- 《企业软件交付:敏捷与高效管理精要》——2.2 MyCo公司和MyProj企业软件交付项目...
- Zabbix 监控之 修改管理员用户密码
- html5中web存储(localStorage、sessionStorage)与cookie的区别?????
- Vb.net遍历一个窗口中的所有某类对象 (窗体中的控件) 的方法
- java关键字与解释_Java关键字及作用解释
- 警告warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
- 抖音autojs 云控脚本源码
- 大数据笔记--Hadoop(第二篇)
- 【Pranet】论文及代码解读(RFB与aggregation部分)——Cavy岚