我已經接管了一個項目,並且在發送一封電子郵件之後,應該記錄細節以及是否成功發送電子郵件。我需要使用什麼參數「e As AsyncCompletedEventArgs」
但是,我注意到記錄數據的子程序永遠不會被調用。所以,我想這包括在郵件發送代碼的底部,像這樣
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()' is obsolete: 'This API supports the .NET framework infrastructure and is not intended to be used directly from your code
這是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
Smtp_Server.Send是一個同步調用,但sendComplete似乎期待異步調用的結果。這可能不是預期的。 – Slugsie
@Slugsie,嗯,在這種情況下我怎麼稱呼它? – Harambe
我不認爲你應該叫它。它看起來像一個事件處理程序。某處你應該有一條類似於這樣的代碼:'AddHandler Smtp_Server.SendCompleted,AddressOf sendComplete'當SendAsync方法完成時,事件將被引發並且處理程序將運行。另外'Smtp_Server'是'SmtpClient'類實例的一個很差的變量名! –