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

问题描述:

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

这是我今天看到的关于电子邮件的第三个问题 – 2009-12-28 07:08:10

我通常会使用try/catch来处理这类事情。

而不是捕获Generic Exception你可以捕获SmtpExceptionSmtpFailedRecipientsException的。

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 

您可以使用它总是返回真或假的您的发送状态的布尔方法。

如果您没有错误,请检查emailId是否存在。

你可能会碰到的另一个问题是,邮件被发送,但是不是由于垃圾邮件过滤到达那里。如果它适用于一个电子邮件地址,它应该可以忽略TextBox2检查Gmail地址。