SmtpClient.Send не работает в среде Linux

Следующий код, написанный в среде .net core 2, работает в среде the windows environment, но не в среде the linux environment.

string host = "10.99.99.10";
int port = 25;
string userName = "[email protected]";
string password = "password";
string from = userName;

var client = new SmtpClient
{
    Host = host,
    Port = port,
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(userName, password)
};

MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(from);
mailMessage.To.Add(userName);
mailMessage.Body = "This is test mail.";
mailMessage.Subject = "Testing";                
client.Send(mailMessage);

Исключение: Failure sending mail.

Внутреннее исключение:

System.ComponentModel.Win32Exception (0x80004005): GSSAPI operation failed with error - An invalid status code was supplied (Unknown error).
   at System.Net.Security.NegotiateStreamPal.AcquireCredentialsHandle(String package, Boolean isServer, NetworkCredential credential)
   at System.Net.NTAuthentication.Initialize(Boolean isServer, String package, NetworkCredential credential, String spn, ContextFlagsPal requestedContextFlags, ChannelBinding channelBinding)
   at System.Net.Mail.SmtpNtlmAuthenticationModule.Authenticate(String challenge, NetworkCredential credential, Object sessionCookie, String spn, ChannelBinding channelBindingToken)
   at System.Net.Mail.SmtpConnection.SetContextAndTryAuthenticate(ISmtpAuthenticationModule module, NetworkCredential credential, ContextAwareResult context)
   at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
   at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
   at System.Net.Mail.SmtpClient.GetConnection()
   at System.Net.Mail.SmtpClient.Send(MailMessage message)

Трассировки стека:

at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at MyProject.Helper.Utils.SendMail() in C:\Test\MyProject\MyProject.Helper\Utils.cs:line 146

Линукс: Ubuntu 16.04.3 LTS

Это консольное приложение. Почему не работает в среде Linux?


person Cer    schedule 09.10.2017    source источник
comment
Возможно, ваш SMTP-сервер требует аутентификации. Попробуйте telnet 10.99.99.10 25 и попробуйте отправить тестовое письмо с помощью SMTP-команд. samlogic.net/articles/smtp-commands-reference.htm   -  person Sameer Naik    schedule 09.10.2017
comment
@SameerNaik Telnet работает (10.99.99.10 25)   -  person Cer    schedule 09.10.2017
comment
Причиной кода ошибки 0x80004005, по-видимому, является поврежденная установка. Я бы попробовал переустановить ядро ​​.net. support.microsoft.com/en-gb/help/914232/   -  person Manos Pasgiannis    schedule 09.10.2017
comment
@ManosPasgiannis Я пытался, но проблема не устранена.   -  person Cer    schedule 09.10.2017
comment
Также обратите внимание, что MailKit по-прежнему является предпочтительным способом отправки электронной почты в .NET Core. Кроме того, это может быть одна из проблем, о которых говорит @Karelz здесь: github.com /dotnet/corefx/pull/12416#issuecomment-330279488   -  person Bruno Garcia    schedule 15.10.2017
comment
@BrunoGarcia Я пробовал разные комбинации, но получал неправильные сертификаты или ошибки входа. MailKit работает на Windows.   -  person Cer    schedule 25.10.2017


Ответы (1)


Я думал, что это ошибка кода из-за ошибки, которая у меня была, но это не так. Когда я дал relay authority на стороне почтового сервера, моя проблема была решена. Я думаю, что это делается автоматически в среде Windows.

Изменить: добавить IP-адрес и разрешить анонимному пользователю в соединителях получения/сервере Exchange.

person Cer    schedule 27.10.2017
comment
Что такое полномочия ретрансляции на почтовом сервере? - person daniel the man; 20.02.2018
comment
@danieltheman Я думаю, что он отправляет почту без проверки информации о пользователе, такой как анонимный. - person Cer; 11.06.2018
comment
Проверьте также этот ответ. - person NEER; 01.07.2021