【问题标题】:Cannot authenticate to SMTP server with windows authentication无法使用 Windows 身份验证对 SMTP 服务器进行身份验证
【发布时间】:2014-05-23 22:07:36
【问题描述】:

我整天都在研究这个问题,我束手无策!我根本无法让我的 smtp 服务器与我的 Windows 用户进行身份验证 - 我做错了什么?我不断收到错误:

SMTP 服务器需要安全连接,或者客户端没有 认证。服务器响应是:5.7.3 客户端没有 已认证

我的 smtp 设置为在访问选项卡中将身份验证设置为 集成 Windows 身份验证

我的中继限制设置为仅以下列表,并且我已将 127.0.0.1 添加到列表中。我还选中了允许所有成功通过身份验证的计算机进行中继,而不管上面的列表

其他所有内容仍设置为其默认值。我的代码说:

var objMessage = new MailMessage("fromEmail@sometest.com", "toEmail@gmail.com");

// format subject and message
objMessage.Subject = "testing email";
objMessage.Body = "blah blah";

using (var client = new SmtpClient())
{
    client.Host = "127.0.0.1";
    client.Port = 25;
    client.UseDefaultCredentials = false;
    client.Credentials = new System.Net.NetworkCredential("SMTPuser", "mypassword");
    client.Send(objMessage);
}

我已经在机器上创建了一个标准的 Windows 用户 SMTPuser 并使用匹配的密码。我很困惑。此 Windows 身份验证应该如何工作?我做错了什么假设?为什么我只有在所有安全级别都设置为匿名时才能发送?

我要做的就是向任何域发送邮件(我不需要接收邮件),并且显然可以保护我的服务器免受垃圾邮件发送者使用它来发送垃圾邮件。目前,唯一合法的访问应该来自本地主机。从我所做的研究来看,我似乎可以通过将所有内容设置为匿名来完成我想要的,但随后将连接限制为 127.0.0.1 并将中继限制限制为 127.0.0.1 - 对吗?我即将求助于它,但我真的很想了解它是如何工作的,尤其是在我可能希望有一天远程访问 smtp 服务器的情况下。

我是否认为我可以设置一个服务器,让任何可以通过我的 SMTPuser Windows 登录进行身份验证的人都能够使用我的 smtp 服务器向任何域发送电子邮件?

【问题讨论】:

    标签: security authentication smtp


    【解决方案1】:

    您应该在 SMTP 服务中启用基本身份验证,因为 SmtpClient 类不使用集成 Windows 身份验证。

    仅限制 127.0.0.1 对 SMTP 服务的访问也足够了,因为这将有效地阻止外部任何人使用该服务。

    【讨论】:

    • 谢谢 - 但是,如何指定我想用于基本身份验证的用户名和密码?基本身份验证下的唯一字段是“默认域”和“需要 TLS 加密”复选框
    • 在服务器上创建一个本地用户帐户并给它一个合适的密码(永不过期),然后将基本身份验证下的默认域设置为服务器的本地域。当您的 SMTP 客户端提供用户名和密码时,SMTP 服务会根据本地域中的帐户对其进行验证。由于基本身份验证通过网络以明文形式发送密码,您可以添加“需要 TLS 加密”以强制客户端在连接到 SMTP 服务器时使用 TLS,但如果客户端不支持它可能会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2015-04-29
    相关资源
    最近更新 更多