我有一個用 vb.net 3.5 撰寫的 vb.net 表單應用程式。它通過 smtp 電子郵件服務器發送電子郵件:office 365。Office 365 將終止對 TLS 1.0 和 1.1 的支持。
程式開始拋出錯誤:身份驗證失敗,因為遠程方已關閉傳輸流。奇怪的是,當錯誤發生時,電子郵件仍然被發送。
研究表明,這是由于用于連接到服務器的安全協議被拒絕。奇怪的是,電子郵件仍然被發送。
我做了一些研究,發現我需要將站點寫入的 VB.net 版本升級到至少 4.6 才能支持 TLS 1.2。我將網站升級到 VB.net 4.8 并收到一條新的錯誤訊息:SMTPException 未處理。
我想出了如何處理例外,但不知道如何修復例外。我相信這與我使用 EnableSsl() 的事實有關,因此程式試圖使用 SSl 而不是 TLS。我不知道。
下面是我用來發送電子郵件的代碼:
Dim smtp As New SmtpClient(Session("SMTPClient"))
smtp.Port = 587
mail.From = New MailAddress("[email protected]")
mail.To.Add("[email protected]")
mail.ReplyTo = New MailAddress("[email protected]")
smtp.UseDefaultCredentials = False
smtp.Credentials = New System.Net.NetworkCredential("user", "password", "domain")
smtp.EnableSsl() = True
If Session("sent") = 0 Then
Try
smtp.Send(mail)
Catch ex As SmtpException
Response.Write(ex)
End Try
Session("sent") = 1
End If
發送時出現的錯誤:
System.Net.Mail.SmtpException:發送郵件失敗。---> System.IO.IOException:身份驗證失敗,因為遠程方已關閉傳輸流。在 System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)at System.Net.Security .SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)at System.Net.Security.SslState.StartSendBlob(Byte[]incoming, Int32 count, AsyncProtocolRequest) asyncRequest)at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)at System.Net.TlsStream。
uj5u.com熱心網友回復:
您可以指定要使用的協議
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343696.html
