多线程发送电子邮件模块
现在的情况如下:
我建立了一个类是开辟一个线程发送电子邮件,发送成功后返回事件,通知客户端发送成功或者失败。
客户端这样定义Private WithEvents m_SendMail As beconSendEMail = New beconSendEMail()
经过对SendMail 的属性赋值,调用方法,就可以发送邮件了。
事件绑定如下
Private Sub m_SendMail_showReturn(ByVal sender As Object, ByVal message As String, ByVal messageID As Integer) Handles m_SendMail.showReturn
现在需要发送很多邮件(数目不定),邮件的附件和目标都不一致。我该怎么声明多个带事件的SendMail 对象,且能为他的事件绑定一个方法,以处理每一个发送邮件类返回的结果?
For Each s As String In saveFileName
'通常这样定义多个发送电子邮件的类,不过却不能产生发送成功或者失败的事件
dim _SendMail as new SendMail()
_SendMail.UserName = saveUserName(0)
_SendMail.Password = IniInformation.mEmail.Password
_SendMail.mailFrom = IniInformation.mEmail.EmailAddress
_SendMail.mailTo = IniInformation.mKul.DstAddress
_SendMail.mailCC = IniInformation.mKul.cc
_SendMail.mailBCC = IniInformation.mKul.bcc
_SendMail.Subject = IniInformation.mEmail.MailTitle_kul & System.IO.Path.GetFileName(s)
_SendMail.addattachments(s)
_SendMail.StartThread()
Next
以下为beconSendEMail 类中的发送线程中的函数,_SendMail.StartThread后即执行Sendemail函数。
Private Function Sendemail() As Boolean
Dim stmp As New SmtpClient(Server, Integer.Parse(Port))
Dim mMail As MailMessage = New MailMessage()
Try
mMail.From = New MailAddress(mailFrom)
Call setMailCollection(mailTo, mMail.To)
Call setMailCollection(mailCC, mMail.CC)
Call setMailCollection(mailBCC, mMail.Bcc)
mMail.Subject = Subject
mMail.Priority = Priority
mMail.BodyEncoding = mailEncoding
mMail.IsBodyHtml = IsHtml
If IsHtml = True Then
mMail.Body = HtmlBody
Else
mMail.Body = Body
End If
setAttachments(mailAttachments, mMail.Attachments)
stmp.Credentials = New NetworkCredential(UserName, Password) 'set user ID and user Password
stmp.Timeout = Integer.Parse(TimeOut)
stmp.Send(mMail)
mMail.Attachments.Dispose()
mMail.Dispose()
RaiseEvent showReturn(Me, Subject & " 送信成功した。", 0)
Return True
Catch ex As Exception
If Not (mMail.Attachments Is Nothing) Then mMail.Attachments.Dispose()
If Not (mMail Is Nothing) Then mMail.Dispose()
RaiseEvent showReturn(Me, Subject & " 送信失敗した。" & vbCrLf & ex.Message, 1)
Return False
Finally
End Try
End Function