VB.NET 在单独的线程中发送电子邮件
VB.NET sending email in a separate thread
我在 vb.net 中有一个带有按钮的主窗体,单击该按钮后将显示一个包含另一个按钮的 Windows 对话框。单击对话框中的按钮,我必须发送电子邮件并关闭对话框。
问题来了
电子邮件发送大约需要 5 到 6 秒。我需要在发送电子邮件之前关闭对话框。我正在考虑将电子邮件发送到线程中。实现这一目标的最佳方法是什么?你能发送一个示例代码吗?如果对话框关闭时线程为 运行 会怎样?
另外,使用后台工作者会更好吗?我不确定线程是否是最好的方法。
试试这个
Public Class libMail
Private WithEvents bw As New BackgroundWorker
Public Sub BackgW()
bw.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles bw.DoWork
SendMail("Subject", "SendingMail")
End Sub
Public Shared Function CheckForInternetConnection() As Boolean
Try
Return My.Computer.Network.Ping("www.google.com")
Catch
Return False
End Try
End Function
Public Function SendMail(subject As String, msg As String) As String
Try
Select Case CheckForInternetConnection()
Case True
Dim smtpServer As New SmtpClient
Dim eMail As New MailMessage()
smtpServer.UseDefaultCredentials = False
smtpServer.Credentials = New System.Net.NetworkCredential("YourMail", "yourPassword")
smtpServer.Port = 587
smtpServer.EnableSsl = True
smtpServer.Host = "smtp.gmail.com"
eMail = New MailMessage()
eMail.From = New MailAddress("yourMail")
eMail.To.Add("MailToSend")
eMail.Subject = subject
eMail.IsBodyHtml = False
eMail.Body = msg
smtpServer.Send(eMail)
Return "SENT"
End Select
Return Nothing
Catch ex As Exception
Return Nothing
End Try
End Function
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
'do some work when is over
End Sub
End class
'调用它
Using l As New libMail
l.BackgW()
'CLOSE FORM
End Using
我在 vb.net 中有一个带有按钮的主窗体,单击该按钮后将显示一个包含另一个按钮的 Windows 对话框。单击对话框中的按钮,我必须发送电子邮件并关闭对话框。
问题来了
电子邮件发送大约需要 5 到 6 秒。我需要在发送电子邮件之前关闭对话框。我正在考虑将电子邮件发送到线程中。实现这一目标的最佳方法是什么?你能发送一个示例代码吗?如果对话框关闭时线程为 运行 会怎样?
另外,使用后台工作者会更好吗?我不确定线程是否是最好的方法。
试试这个
Public Class libMail
Private WithEvents bw As New BackgroundWorker
Public Sub BackgW()
bw.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles bw.DoWork
SendMail("Subject", "SendingMail")
End Sub
Public Shared Function CheckForInternetConnection() As Boolean
Try
Return My.Computer.Network.Ping("www.google.com")
Catch
Return False
End Try
End Function
Public Function SendMail(subject As String, msg As String) As String
Try
Select Case CheckForInternetConnection()
Case True
Dim smtpServer As New SmtpClient
Dim eMail As New MailMessage()
smtpServer.UseDefaultCredentials = False
smtpServer.Credentials = New System.Net.NetworkCredential("YourMail", "yourPassword")
smtpServer.Port = 587
smtpServer.EnableSsl = True
smtpServer.Host = "smtp.gmail.com"
eMail = New MailMessage()
eMail.From = New MailAddress("yourMail")
eMail.To.Add("MailToSend")
eMail.Subject = subject
eMail.IsBodyHtml = False
eMail.Body = msg
smtpServer.Send(eMail)
Return "SENT"
End Select
Return Nothing
Catch ex As Exception
Return Nothing
End Try
End Function
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted
'do some work when is over
End Sub
End class
'调用它
Using l As New libMail
l.BackgW()
'CLOSE FORM
End Using