SMTP-ретранслятор SparkPost с StartTLS неожиданно выдает ошибку "Ошибка аутентификации, поскольку удаленная сторона закрыла транспортный поток".
У меня есть (долго) работающее веб-приложение, написанное на VB на платформе ASP.NET 4.0.
Мы использовали SparkPost для отправки сообщений электронной почты некоторое время, но через несколько дней (не уверен насчет точной даты), функция электронной почты перестала работать и начала выдавать следующее сообщение об ошибке
Ошибка аутентификации, потому что удаленная сторона закрыла транспортный поток.
Мы используем MailKit версии 1.22 (последняя поддерживает ASP.NET 4.0), чтобы установить соединение и отправлять электронные письма следующим образом:
Using objMessage As New MailMessage(from, to, title, message)
objMessage.IsBodyHtml = True
'https://github.com/jstedfast/MailKit
Using client As New MailKit.Net.Smtp.SmtpClient()
''accept all SSL certificates (in case the server supports STARTTLS)
client.ServerCertificateValidationCallback = Function(sender, certificate, chain, errors)
Return True
End Function
''Note: since we don't have an OAuth2 token, disable the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2")
client.AuthenticationMechanisms.Add("AUTH LOGIN")
client.Connect("smtp.sparkpostmail.com", 587, SecureSocketOptions.StartTls)
''Note: only needed if the SMTP server requires authentication
client.Authenticate("SMTP_Injection", "**********************")//the asterixes are the API key
client.Send(objMessage)
client.Disconnect(True)
End Using
End Using
эта настройка с StartTLS - то, что документация SparkPost хочет, чтобы я использовал.
Я читал, что SparkPost недавно прекратил поддержку TSL 1.0. Может ли это быть виновником?
1 ответ
.NET Framework 4.0 использует SSL3.0 или TLS1.0 в качестве протокола по умолчанию. Самый простой способ решить эту проблему - обновить существующее приложение до.NET Framework 4.6.2. После обновления ваше приложение будет использовать протокол TLS1.2 по умолчанию. Вы можете прочитать больше об этом здесь