2017-05-18 42 views
0

我已經接管了一個項目,並且在發送一封電子郵件之後,應該記錄細節以及是否成功發送電子郵件。我需要使用什麼參數「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 
+0

Smtp_Server.Send是一個同步調用,但sendComplete似乎期待異步調用的結果。這可能不是預期的。 – Slugsie

+0

@Slugsie,嗯,在這種情況下我怎麼稱呼它? – Harambe

+0

我不認爲你應該叫它。它看起來像一個事件處理程序。某處你應該有一條類似於這樣的代碼:'AddHandler Smtp_Server.SendCompleted,AddressOf sendComplete'當SendAsync方法完成時,事件將被引發並且處理程序將運行。另外'Smtp_Server'是'SmtpClient'類實例的一個很差的變量名! –

回答

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

+0

它的工作,它確實調用'sendComplete'代碼,但電子郵件始終無法發送。將它改回只是'Smtp_Server.Send(e_mail)'的作品,所以不知道這裏發生了什麼問題? – Harambe

+0

@Harambe必須有一些根深蒂固的東西,據我所知,這對我沒有太多的其他差異很好。 – David

相關問題