====== Send an e-mail in VB .NET ======
Sending an e-mail is quite simple. This example saves an .eml file if sending fails
Dim msg As New Mail.MailMessage
msg.From = New Mail.MailAddress(StrSender)
msg.To.Add(New Mail.MailAddress(StrRecipient))
msg.CC.Add(New Mail.MailAddress(StrCarbonCopy))
msg.Subject = "Message subject"
msg.Body = "Hello, " & vbCrLf & _
"This is message body"
msg.IsBodyHtml = False 'Set this to True if body is HTML
msg.Attachments.Add(New Mail.Attachment("c:\temp\file.att"))
Dim smtp As New Mail.SmtpClient("127.0.0.1") 'Replace with the IP address of SMTP server.
'If the server is on non default port. Use Mail.SmtpClient(server,port)
'If the server requires an username and a password
smtp.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
Try 'Try to send the message
smtp.Send(msg)
Catch exc As Exception 'Failed to send message. Create an .eml and store it for later send attempt
smtp.DeliveryMethod = Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory
smtp.PickupDirectoryLocation = "c:\temp\eml"
smtp.Send(msg)
Finally 'Dispose of the objects
smtp.Dispose()
smtp = Nothing
End Try
msg.Dispose()
msg = Nothing
The example above detect if the message fails, but what if the sending was canceled by user?
Modify the above code:
Dim msg As New Mail.MailMessage
msg.From = New Mail.MailAddress(StrSender)
msg.To.Add(New Mail.MailAddress(StrRecipient))
msg.CC.Add(New Mail.MailAddress(StrCarbonCopy))
msg.Subject = "Message subject"
msg.Body = "Hello, " & vbCrLf & _
"This is message body"
msg.IsBodyHtml = False 'Set this to True if body is HTML
msg.Attachments.Add(New Mail.Attachment("c:\temp\file.att"))
Dim smtp As New Mail.SmtpClient("127.0.0.1") 'Replace with the IP address of SMTP server.
'If the server is on non default port. Use Mail.SmtpClient(server,port)
'If the server requires an username and a password
smtp.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
AddHandler smtp.SendCompleted, AddressOf SendCompletedCallback
Try 'Try to send the message
smtp.Send(msg)
Catch exc As Exception 'Failed to send message. Create an .eml and store it for later send attempt
smtp.DeliveryMethod = Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory
smtp.PickupDirectoryLocation = "c:\temp\eml"
smtp.Send(msg)
Finally 'Dispose of the objects
smtp.Dispose()
smtp = Nothing
End Try
msg.Dispose()
msg = Nothing
And add the specified method
Private Shared mailSent As Boolean = False
Private Shared Sub SendCompletedCallback(ByVal sender As Object, ByVal e As ComponentModel.AsyncCompletedEventArgs)
' Get the unique identifier for this asynchronous operation.
Dim token As String = CStr(e.UserState)
If e.Cancelled Then
Console.WriteLine("[{0}] Send canceled.", token)
End If
If e.Error IsNot Nothing Then
Console.WriteLine("[{0}] {1}", token, e.Error.ToString())
Else
Console.WriteLine("Message sent.")
End If
mailSent = True
End Sub