Netcore 2.2 - Docker Контейнер не может отправлять почту - PullRequest
0 голосов
/ 09 мая 2020

В настоящее время я развертываю одно приложение в контейнере docker, это приложение имеет функцию отправки почты (на основе c# netcore 2.2), но я не могу отправлять почту (хотя имею в виду, что могу отправлять почту с локального хоста) сообщение исключение в docker

System.ComponentModel.Win32Exception: операция GSSAPI завершилась ошибкой - неуказанный сбой GSS. Дополнительный код может предоставить дополнительную информацию (Не удается найти KD C для области «xxx.yyyy»). в System. Net .Security.NegotiateStreamPal.AcquireCredentialsHandle (String package, Boolean isServer, NetworkCredential credential) в System. Net .NTAuthentication.Initialize (Boolean isServer, String package, NetworkCredential Credential, ChannelFinding, запрошенный канал ) в System. Net .Mail.SmtpNegotiateAuthenticationModule.Authenticate (запрос строки, учетные данные NetworkCredential, объект sessionCook ie, String spn, ChannelBinding channelBindingToken) в System. Net .Mail.SmtpConnection.SetContextAndTryAuthentication module (модуль ISSetContextAndTryAuthentication , ContextAwareResult context)
в System. Net .Mail.SmtpConnection.GetConnection (String хост, порт Int32) в System. Net .Mail.SmtpTransport.GetConnection (String хост, порт Int32) в System. Net .Mail.SmtpClient.GetConnection () в системе. Net .Mail.SmtpClient.Send (сообщение MailMessage) --- Конец трассировки стека внутреннего исключения --- в системе. Net .M ail.SmtpClient.Send (сообщение MailMessage)

Я попробовал помощь от Google, но не могу, поэтому, пожалуйста, помогите мне, спасибо

1 Ответ

0 голосов
/ 28 июля 2020

Кажется, есть проблема в do tnet на linux, когда вы отправляете письма с типом аутентификации GSSAPI: https://github.com/dotnet/runtime/issues/2174, https://github.com/dotnet/runtime/issues/25885, https://github.com/dotnet/runtime/issues/27285

Попробуйте установить "gss-ntlmssp" в контейнер, если вам нужно использовать GSSAPI.

Или, если ваш сервер поддерживает другие типы аутентификации, используйте другой , например NTLM:

var cred = new NetworkCredential(user, password, domain);
var cache = new CredentialCache();
cache.Add(host, 25, "NTLM", cred);
client.Credentials = cache;
...