- 浏览: 2106409 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1878)
- [网站分类]ASP.NET (141)
- [网站分类]C# (80)
- [随笔分类]NET知识库 (80)
- [随笔分类]摘抄文字[非技术] (3)
- [随笔分类]养生保健 (4)
- [网站分类]读书区 (16)
- [随笔分类]赚钱 (7)
- [网站分类].NET新手区 (233)
- [随笔分类]网站 (75)
- [网站分类]企业信息化其他 (4)
- [网站分类]首页候选区 (34)
- [网站分类]转载区 (12)
- [网站分类]SQL Server (16)
- [网站分类]程序人生 (7)
- [网站分类]WinForm (2)
- [随笔分类]错误集 (12)
- [网站分类]JavaScript (3)
- [随笔分类]小说九鼎记 (69)
- [随笔分类]技术文章 (15)
- [网站分类]求职面试 (3)
- [网站分类]其他技术区 (6)
- [网站分类]非技术区 (10)
- [发布至博客园首页] (5)
- [网站分类]jQuery (6)
- [网站分类].NET精华区 (6)
- [网站分类]Html/Css (10)
- [随笔分类]加速及SEO (10)
- [网站分类]Google开发 (4)
- [随笔分类]旅游备注 (2)
- [网站分类]架构设计 (3)
- [网站分类]Linux (23)
- [随笔分类]重要注册 (3)
- [随笔分类]Linux+PHP (10)
- [网站分类]PHP (11)
- [网站分类]VS2010 (2)
- [网站分类]CLR (1)
- [网站分类]C++ (1)
- [网站分类]ASP.NET MVC (2)
- [网站分类]项目与团队管理 (1)
- [随笔分类]个人总结 (1)
- [随笔分类]问题集 (3)
- [网站分类]代码与软件发布 (1)
- [网站分类]Android开发 (1)
- [网站分类]MySQL (1)
- [网站分类]开源研究 (6)
- ddd (0)
- 好久没写blog了 (0)
- sqlserver (2)
最新评论
-
JamesLiuX:
博主,能组个队么,我是Freelancer新手。
Freelancer.com(原GAF – GetAFreelancer)帐户里的钱如何取出? -
yw10260609:
我认为在混淆前,最好把相关代码备份一下比较好,不然项目完成后, ...
DotFuscator 小记 -
日月葬花魂:
大哥 能 加我个QQ 交流一下嘛 ?51264722 我Q ...
web应用程序和Web网站区别 -
iaimg:
我想问下嵌入delphi写的程序总是出现窗体后面感觉有个主窗体 ...
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部 -
iaimg:
代码地址下不了啊!
C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
客户要求为他的网站注册用户群发邮件
网站注册用户有9860名,因为注册时需要用户必须提供电子邮件,因为要对所有的9860名用户发送
如果采用主线程发送,必然造成连接超时或是漫长的用户等待,因而采用了异步发送的方式处理此群发
于是最初写了一个群发的类
网站注册用户有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
<!--<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()
<!--<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()
发表评论
-
where T:new() 是什么意思
2014-04-18 09:26 1393where T:new() 是什么意思 经常看到方法后面 ... -
为何在wpf中textbox的值有时不会实时的变化
2013-11-03 19:31 1357TextBox绑定view model 中的一个属性,如果T ... -
好久没写blog了
2012-05-21 18:43 2好久没写blog了 -
使用MySQL命令行修改密码
2011-07-27 20:37 1019使用MySQL命令行修改密码 下面为您额极少的My ... -
更改lnmp安装后的MySQL密码方法
2011-07-27 20:36 1390更改lnmp安装后的MySQL密码方法 2011-07- ... -
mysql-bin.000001文件的来源及处理方法[转]
2011-07-27 20:31 1247mysql-bin.000001文件的来 ... -
lnmp vps下mysql备份
2011-07-27 20:31 1004mysql-bin.000001文件的来 ... -
N点虚拟主机管理系统安装图解
2011-07-25 00:13 1800<script type="text/j ... -
CentOS 6.0正式版终于发布
2011-07-24 10:29 1563CentOS 6.0新在什么地方 ... -
关系数据库还是NoSQL数据库
2011-07-22 16:35 907关系数据库还是NoSQL数据库 作者 孙立 发布于 2 ... -
关系数据库还是NoSQL数据库
2011-07-22 16:31 1037关系数据库还是NoSQL数据库 作者 孙立 发布于 2 ... -
NoSQL开篇——为什么要使用NoSQL
2011-07-22 16:26 1007NoSQL开篇——为什么要使用NoSQL 作者 孙立 发布 ... -
HubbleDotNet开源全文搜索数据库项目--技术详解
2011-07-21 17:49 1139HubbleDotNet开源全文搜索数据库项目--技术 ... -
细说 Form (表单)
2011-07-21 12:27 1199细说 Form (表单) Form(表单)对于每 ... -
ASP.NET(C#)常用数据加密和解密方法汇总
2011-07-21 12:26 1307应同事所邀把ASP.NET(C#)常用数据加密和解密方法 ... -
ds
2011-07-21 09:44 956blog%5Borigin%5D=0&blog%5Bc ... -
ds
2011-07-21 09:42 928请输入文章内容dsafas -
test
2011-07-21 09:31 861testestestestestestestestestest ... -
判断两个数组中是否存在相同的数字
2010-06-17 09:03 2121判断两个数组中是否存在相同的数字 给定两个排好序的数 ... -
用C#读取XML文档
2010-04-06 09:15 1536本文将以一个非常简单 ...
相关推荐
Vue3学习ddddddddd
matlab基础语法%% % 建议有C语言或其他编程基础,了解线性代数和矩阵相关知识 ...% 加*为了解内容 % 生成矩阵 % 直接法 a = [1,2,3;4,5,6;7,8,9]; % 冒号一维矩阵 a = 开始:步长:结束,步长为1可省略 ...
most of the programs are for data structure
一个未完工的app
主要讲PCB中的布线中出现的各种问题。 dddddddddddddddddddd ddddddddd
用MFC画的一个简单图ddddddddd
中国社会文化转型综论,内容很详尽ddddddddd
很强大的软件,百度开发,、。。。ddddddddd
整理的一份关于 前端面试 html css js 的文档 ddddddddd
51单片机汇编学习课件,很好很全面ddddddddd~~
想要的就下载吧 看看是不是你想要的 DDDDDDDDD
EMC方面的标准,希望有人能用到。支持一下。DDDDDDDDD
HiJson 里面包含64和32位的点击既能使用,用于解析json字符串,让结果整体更加清晰明了DDDDDDDDD
String[] contents = {"aaaaa","bbbbb","cccccc","ddddddddd","不知道中文会不会乱码呢"}; //这个只是测试数据,具体要怎么样的形式保存待定 wr.writeRecord(contents); wr.close(); } catch ...
spi2wb 用SPI总线驱动Wishbone主总线。 协议 如下: 模式b01-> CPOL = 0 CPHA = 1 CS =低电平有效 spi2wb帧的组成如下: 8位模式 写框: MOSI : 1AAAAAAA DDDDDDDD ...MISO : ZZZZZZZZ DDDDDDDDD
台湾新代系统PLC编程软件 免安装版本 T型图编写 系统调试
DDDDDDDDDDDDDDDDDDDD
dddddddddddddddddddd
ghklg,cxbfbcxzc fffffffz
Format = ddddddddd X = 340 Y = 10 Width = 168 Interval = 1000 Size = 36 Weight = 700 CreateFont #--------------------------------- #--------------------------------- ICONXPBUTTON x = 10 y = 420 ...