In previous section, I introduced how to encrypt email with digital certificate. In this section, I will introduce how to use event handler and send email asynchronously in VB 6.0.
In synchronous mode, once SendMail method is called, it returns to application after the method is complete. Therefore, if the runtime (it depends on the networking connection and the email size) is long, your application cannot do anything before this method ends, which results “my application is blocked or halted”. In contrast, in asynchronous mode, as SendMail method works in background, this methods return to application immediately no matter the running method is complete or not.
In previous examples, after SendMail method is invoked, if you want to know the progress of the email sending, you should use Event Handler to monitor the progress of email sending.
Remarks: All of samples in this section are based on first section: Send email in a simple VB 6.0 project. To compile and run the following example codes successfully, please click here to learn how to create the test project and add reference of EASendMail to your project.
To demonstrate how to use asynchronous mode and event handler, let’s add a Label control in the form at first, the name of the label is “Label1”.
The following example codes demonstrate how to send email with event handler in asynchronous mode.
To get the full sample projects, please refer to Samples section.
Const ConnectNormal = 0 Const ConnectSSLAuto = 1 Const ConnectSTARTTLS = 2 Const ConnectDirectSSL = 3 Const ConnectTryTLS = 4 Private WithEvents oSmtp As EASendMailObjLib.Mail Private m_bError As Boolean Private m_bFinished As Boolean Private Sub oSmtp_OnAuthenticated() Label1.Caption = "Authenticated" End Sub Private Sub oSmtp_OnClosed() If Not m_bError Then Label1.Caption = "email was sent successfully!" End If m_bFinished = True End Sub Private Sub oSmtp_OnConnected() Label1.Caption = "Connected" End Sub Private Sub oSmtp_OnError(ByVal lError As Long, ByVal ErrDescription As String) Label1.Caption = "failed to send email with error: " & ErrDescription m_bError = True m_bFinished = True End Sub Private Sub oSmtp_OnSending(ByVal lSent As Long, ByVal lTotal As Long) Label1.Caption = "Sending " & lSent & "/" & lTotal End Sub Private Sub Command1_Click() If oSmtp Is Nothing Then Set oSmtp = New EASendMailObjLib.Mail oSmtp.LicenseCode = "TryIt" End If m_bError = False m_bFinished = False ' Set your sender email address oSmtp.FromAddr = "firstname.lastname@example.org" ' Add recipient email address oSmtp.AddRecipientEx "email@example.com", 0 ' Set email subject oSmtp.Subject = "test email from VB 6.0 in asynchronous mode" ' Set email body oSmtp.BodyText = "this is a test email sent from VB 6.0 project with asynchronous mode" ' Your SMTP server address oSmtp.ServerAddr = "smtp.emailarchitect.net" ' User and password for ESMTP authentication, if your server doesn't require ' User authentication, please remove the following codes. oSmtp.UserName = "firstname.lastname@example.org" oSmtp.Password = "testpassword" ' ConnectTryTLS means if server supports SSL/TLS connection, SSL/TLS is used automatically oSmtp.ConnectType = ConnectTryTLS ' If your server uses 587 port ' oSmtp.ServerPort = 587 ' If your server uses 25/587/465 port with SSL/TLS ' oSmtp.ConnectType = ConnectSSLAuto ' oSmtp.ServerPort = 25 ' 25 or 587 or 465 ' Set asynchronous mode oSmtp.Asynchronous = 1 Command1.Enabled = False Label1.Caption = "start to send email ..." oSmtp.SendMail Do While Not m_bFinished ' Wait for the email sending, you can do other thing here DoEvents Loop MsgBox Label1.Caption Command1.Enabled = True End Sub
At next section I will introduce how to send mass email with multiple threads in VB6.
If you have any comments or questions about above example codes, please click here to add your comments.