asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站
asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站
2011年09月01日
客户要求为他的网站注册用户群发邮件
网站注册用户有9860名,因为注册时需要用户必须提供电子邮件,因为要对所有的9860名用户发送
如果采用主线程发送,必然造成连接超时或是漫长的用户等待,因而采用了异步发送的方式处理此群发
于是最初写了一个群发的类
#Region"群发邮件处理类"
'''
'''邮件群发异步处理类
'''
_
PublicClassBulkMail
Private_maxCountAsInteger=0
Private_currentCountAsInteger=0
Private_runStateAsBulkMailRunState=BulkMailRunState.Unkonw
Private_messageAsString
Private_listAsList(OfEntity.Member.OwnerIdentityEntity)
Private_threadAsThreading.Thread
Private_mailSubjectAsString
Private_mailBodyAsString
Private_configAsWeb.Config.WebConfig
'''
'''创建一个邮件群发实例
'''
'''邮件主题
'''邮件内容
PublicSubNew(ByValsubjectAsString,ByValbodyAsString)
_config=Web.Config.WebConfig.GetConfig
_mailSubject=subject
_mailBody=body
EndSub
'''
'''初始化发送事件
'''
'''信息集合
PublicSubSend(ByVallistAsList(OfEntity.Member.OwnerIdentityEntity))
_list=list
_thread=NewThreading.Thread(NewThreading.ThreadStart(AddressOfMe.SendMail))
_thread.Start()
EndSub
'''
'''异步发送邮件
'''
PrivateSubSendMail()
Try
_message="群发开始"
_runState=BulkMailRunState.Run
_currentCount=0
_maxCount=_list.Count
DimmailAsWeb.Mail.Mail
mail=NewWeb.Mail.Mail
mail.From=_config.SmtpEmail
mail.FromName=_config.SiteName
mail.isHtml=True
mail.Priority="high"
mail.Subject=_mailSubject
mail.Body=_mailBody
DimsmtpAsWeb.Mail.SmtpMail
smtp=NewWeb.Mail.SmtpMail
smtp.chkSmtp=_config.SmtpAuth
smtp.smtpPassWord=_config.SmtpLoginPassword
smtp.SmtpPort=_config.SmtpPort
smtp.SmtpServer=_config.SmtpServer
smtp.smtpUserName=_config.SmtpLoginName
ForEachinfoAsEntity.Member.OwnerIdentityEntityIn_list
_currentCount+=1
Ifinfo.EmailIsNotNothingAndAlsoinfo.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()
EndIf
Next
_runState=BulkMailRunState.Over
_message="群发结束"
CatchexAsException
_runState=BulkMailRunState.Error
_message=ex.Message&ex.Source&ex.ToString&ex.InnerException.ToString
EndTry
EndSub
#Region"自定义属性"
'''
'''群发状态
'''
'''Thestateoftherun.
PublicReadOnlyPropertyRunState()AsBulkMailRunState
Get
Return_runState
EndGet
EndProperty
'''
'''群发邮件总数
'''
'''Themaxcount.
PublicReadOnlyPropertyMaxCount()AsInteger
Get
Return_maxCount
EndGet
EndProperty
'''
'''已发送数量
'''
'''Thecurrentcount.
PublicReadOnlyPropertyCurrentCount()AsInteger
Get
Return_currentCount
EndGet
EndProperty
'''
'''附加的信息
'''
'''Themessage.
PublicReadOnlyPropertyMessage()AsString
Get
Return_message
EndGet
EndProperty
#EndRegion
EndClass
然后把访类的实例存储在Session会话中,在客户端刷新读取发送进度并显示,在本地测试成功,于是发布到服务器上
客户发送邮件时反馈没有出现进度条,而是直接显示群发完成,但注册会员并未收到邮件
后测试发现是因为群发类把所有的信息存储在Session中,其中也包含了所有的会员信息,由于数据量极大,造成Sesson会话变量丢失,从而造成群发操作直接结束
后修改类
#Region"群发邮件处理类"
'''
'''邮件群发异步处理类
'''
_
PublicClassBulkMail
Private_maxCountAsInteger=0
Private_currentCountAsInteger=0
Private_runStateAsBulkMailRunState=BulkMailRunState.Unkonw
Private_messageAsString
Private_threadAsThreading.Thread
Private_mailSubjectAsString
Private_mailBodyAsString
Private_configAsWeb.Config.WebConfig
'''
'''创建一个邮件群发实例
'''
'''邮件主题
'''邮件内容
PublicSubNew(ByValsubjectAsString,ByValbodyAsString)
_config=Web.Config.WebConfig.GetConfig
_mailSubject=subject
_mailBody=body
EndSub
'''
'''初始化发送事件
'''
'''信息集合
PublicSubSend(ByVallistAsList(OfEntity.Member.OwnerIdentityEntity))
_thread=NewThreading.Thread(AddressOfMe.SendMail)
_thread.Start(list)
EndSub
'''
'''异步发送邮件
'''
Private
asp.net 异步群发邮件时遭遇到的问题 ddddddddd-执着-iteye技术网站相关推荐
- asp.net 异步群发邮件时遭遇到的问题 ddddddddd
客户要求为他的网站注册用户群发邮件 网站注册用户有9860名,因为注册时需要用户必须提供电子邮件,因为要对所有的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 ...
最新文章
- .Net中如何操作IIS(源代码)
- 你的大脑里有AI吗?
- 设计原则:公理系统在编程中的运用
- UNIX再学习 -- 线程控制
- codeforces1554 E. You(思维+数学+转化)
- Ubuntu学习(应用集合、命令行以及遇到的问题)
- turbo c 2.0 官方下载_iMyFone MintPDF英文版官方下载2.0.10
- 修改 xweibo 的memcache代码,让xweibo支持wincache,加快xweibo速度
- 怎么用imp命令把dmp文件从本地导入到远处的数据库服务器,Oracle 数据库导入导出dmp文件...
- oracle 简版客户端instantclient使用 oledb ODAC组件使用
- x86、amd、arm和GPU
- HTML期末作业-我的大学生活
- 视频教程-网络营销-网站盈利方式/淘宝客网络赚钱/广告联盟-其他
- 如何最简单、通俗地理解Python的pandas库?
- VIVE™在MWC上海展示生态全景,虚拟现实行业新趋势初见端倪
- WLAN网络配置,旁挂AC
- 月薪60K技术专家,在阿里巴巴是什么水平?
- RTOS系统 音频player对比分析
- ssrf漏洞php代码审计1
- [Leetcode]5920. 分配给商店的最多商品的最小值