如何检查一行代码是否实际成功?

时间:2009-12-28 06:47:20

标签: vb.net smtp email exception

我正在发送电子邮件发送程序,但我仍然不知道如何检查邮件是否真的被发送,因为有时程序没有错误消息但邮件实际上并未发送。除了使用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()

3 个答案:

答案 0 :(得分:1)

我通常会将try / catch用于此类事情。

您可以抓住Generic ExceptionSmtpException,而不是抓住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地址的所有人。