如何检查一行代码是否实际成功?
问题描述:
我正在做一个电子邮件发送程序,但我不知道如何检查邮件是否真的被发送,因为有时程序没有错误信息,但邮件并未实际发送。除了使用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()
答
我通常会使用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
答
您可以使用它总是返回真或假的您的发送状态的布尔方法。
如果您没有错误,请检查emailId是否存在。
答
你可能会碰到的另一个问题是,邮件被发送,但是不是由于垃圾邮件过滤到达那里。如果它适用于一个电子邮件地址,它应该可以忽略TextBox2检查Gmail地址。
这是我今天看到的关于电子邮件的第三个问题 – 2009-12-28 07:08:10