我正在发送电子邮件发送程序,但我仍然不知道如何检查邮件是否真的被发送,因为有时程序没有错误消息但邮件实际上并未发送。除了使用try catch之外,还有其他方法可以解决这个问题吗?
这是我的代码:
Try
mail.From = New MailAddress(TextBox2.Text)
mail.To.Add(New MailAddress(TextBox1.Text))
mail.Subject = TextBox4.Text
mail.Body = TextBox4.Text
mail.IsBodyHtml = True
Dim client As SmtpClient = New SmtpClient("smtp.gmail.com", 587)
If TextBox2.Text.Contains("@gmail.com") Then
client.EnableSsl = True
client.Credentials = New System.Net.NetworkCredential(TextBox2.Text, TextBox3.Text)
Try
client.Send(mail)
Catch ex As Exception
MessageBox.Show("Sending email failed. Please Try again")
End Try
End If
Catch
MsgBox("Please input the correct value!")
End Try
ProgressBar1.Value = 100
clear()
答案 0 :(得分:1)
我通常会将try / catch用于此类事情。
您可以抓住Generic Exception和SmtpException,而不是抓住SmtpFailedRecipientsException。
无法建立连接或操作超时时,抛出SmtpException 。如果无法将邮件传递给一个或多个收件人,则会引发 SmtpFailedRecipientsException 。
转换的MSDN代码
Try
client.Send(message)
Catch ex As SmtpFailedRecipientsException
For i As Integer = 0 To ex.InnerExceptions.Length - 1
Dim status As SmtpStatusCode = ex.InnerExceptions(i).StatusCode
If status = SmtpStatusCode.MailboxBusy OrElse status = SmtpStatusCode.MailboxUnavailable Then
Console.WriteLine("Delivery failed - retrying in 5 seconds.")
System.Threading.Thread.Sleep(5000)
client.Send(message)
Else
Console.WriteLine("Failed to deliver message to {0}", ex.InnerExceptions(i).FailedRecipient)
End If
Next
Catch ex As Exception
Console.WriteLine("Exception caught in RetryIfBusy(): {0}", ex.ToString())
End Try
答案 1 :(得分:0)
您可以使用bool方法,该方法始终返回发送状态的true或false。
如果您没有错误,请检查emailId是否存在。
答案 2 :(得分:0)
您可能遇到的另一个问题是邮件正在发送但由于垃圾邮件过滤而无法到达。如果它适用于一个电子邮件地址,它应该适用于忽略TextBox2检查gmail地址的所有人。