我有一个大约400名用户在我们公司使用电子邮件的集合,我们正在为他们启动内部网,我正在使用.Net Framework(C#)作为应用程序层。我们希望使用与其电子邮件相同的凭据对这些用户进行身份验证,我们的电子邮件提供商没有此类服务,因此我有想法使用SMTP服务器(需要身份验证)对其进行身份验证。
我在SmtpClient课程上搜索了Authenticate()
方法但无济于事,无法仅验证。以前有没有人必须解决这类问题?我想我必须打开一个套接字到SMTP服务器并自己发送命令,但也许有一种更容易的方法。
答案 0 :(得分:4)
因为你有一个SMTP服务器,我假设你也有一台POP3服务器。假设POP3和SMTP的凭据相同,我认为我也很安全。
如果我的假设是正确的(很可能),您可以通过POP3而不是SMTP对它们进行身份验证。
因此,您可以使用Pop3Client类,它提供了多种身份验证方法:
这样,您的代码将:
你们都准备好了!
答案 1 :(得分:0)
对您的SMTP服务器使用SmtpClient,您正在征求服务。您的应用程序应仅指定是使用Windows身份验证(根据内部网的配置方式为Kerberos还是NTLM)或凭据规范,以及是否使用SSL。
对于应用程序身份验证,您可以从WindowsIdentity引用System.Security.Principal.WindowsIdentity.GetCurrent()。更具体地说,您可以使用IsAuthenticated属性。
在尝试对SMTP服务器进行任何调用之前,如果要使用Windows身份验证,请尝试以下操作:
SmtpClient client = new SmtpClient(server, port);
client.Credentials = CredentialCache.DefaultNetworkCredentials;
然后让SMTP服务器授权用户是否可以实际执行尝试的操作。
如果您想说,禁用操作按钮,因为SMTP服务器会拒绝用户尝试的操作,并且您正在尝试主动并阻止用户做他不能做的事情,那么拒绝必须是确定性的在点击SMTP服务器之前(即你不会简单地依靠SMTP服务器来告诉你;你需要某种商业安全层)。