【发布时间】:2017-10-09 06:09:32
【问题描述】:
以下代码在.net core 2 环境中编写,在the windows environment 中有效,但在the linux environment 中无效。
string host = "10.99.99.10";
int port = 25;
string userName = "user@user.com";
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
Linux:Ubuntu 16.04.3 LTS
这是一个控制台应用程序。 为什么在linux环境下不行?
【问题讨论】:
-
您的 SMTP 服务器可能需要身份验证。尝试
telnet 10.99.99.10 25并尝试使用 SMTP 命令发送测试电子邮件。 samlogic.net/articles/smtp-commands-reference.htm -
@SameerNaik Telnet 正在工作。(10.99.99.10 25)
-
0x80004005错误代码的原因似乎是安装损坏。我会尝试重新安装.net core。 support.microsoft.com/en-gb/help/914232/…
-
@ManosPasgiannis 我试过了,但问题仍然存在。
-
另外,请注意 MailKit 仍然是在 .NET Core 上发送电子邮件的首选方式。此外,这可能是@Karelz 在这里提到的问题之一:github.com/dotnet/corefx/pull/12416#issuecomment-330279488
标签: c# linux asp.net-core .net-core asp.net-core-2.0