我接管了一个项目,在发送电子邮件后,应该记录详细信息以及电子邮件发送是否成功。
但是,我注意到永远不会调用记录数据的子例程。所以,我试图把它包含在电子邮件发送代码的底部,如此
Smtp_Server.Send(e_mail) ' Here, Smtp_Server is System.Net.Mail.SmtpClient
' e_mail is System.Net.Mail.MailMessage
sendComplete(Me, New AsyncCompletedEventArgs) ' This is the call for the log subroutine
但是,底线给出错误:
' Public Sub New()'已过时:'此API支持.NET框架基础结构,不能直接在您的代码中使用
这是sendComplete
子程序的开始。
Public Sub sendComplete(ByVal sender As Object, e As AsyncCompletedEventArgs)
Try
If e.Error IsNot Nothing Then
PictureBox1.Visible = False
MsgBox("Failed to send email!", MessageBoxIcon.Warning + MsgBoxStyle.OkOnly, "Error")
mailSent = True
我需要在第二个参数中添加什么才能使代码调用子程序?或者sendComplete
子程序本身是否需要改变?
修改
按照建议将以下Try...Catch
语句添加到代码后,代码执行正常并且没有点击Catch
,但是,在发送消息后,不会转到sendComplete
子例程。
Smtp_Server.UseDefaultCredentials = False
Smtp_Server.Credentials = New Net.NetworkCredential(senderAdd, senderPass)
Smtp_Server.EnableSsl = False
Smtp_Server.Host = SMTPserver
Try
AddHandler Smtp_Server.SendCompleted, AddressOf sendComplete
Catch ex As Exception
silentErrorLog(ex)
End Try
答案 0 :(得分:1)
自己遇到类似的问题后,@ ChrisDunaway的评论实际证明非常有帮助。我的电子邮件失败但我不确定原因,所以添加异步调用帮助我检测原因。
在您的代码中,您需要拥有AddHandler
,就像您在示例中所写的那样:
Try
AddHandler Smtp_Server.SendCompleted, AddressOf sendComplete
Catch ex As Exception
silentErrorLog(ex)
End Try
然后,你缺少的那部分,你需要提出一些
的内容Dim userState As Object = e_mail
Smtp_Server.SendAsync(e_mail, userState)
这样,您的sendComplete
子例程会检查e_mail
是否有任何问题,并且可以完成代码的If e.Error IsNot Nothing
部分。
有关详细信息,请参阅this site。