上下文:
我们是一家没有Exchange Server(或任何致力于它的人)的小公司,但我们仍然需要/发送电子邮件.
我们决定使用Microsoft Online Services(MOS)
目标:
我们有一个Web服务器(带有IIS 6.0的Windows Server 2003 R2)并部署了一个C#ASP.Net MCV应用程序.
每次用户创建帐户时,Web应用程序都需要发送电子邮件.
根据文档,我们需要使用端口(587)并确保启用传输层安全性(TLS).此外,正在使用的FROM地址必须是"权威"类型,当我通过Microsoft Online Administration Center仔细检查时
代码:
我所拥有的C#代码应该是微不足道的,如下:
SmtpClient server = new SmtpClient("Smtp.mail.microsoftonline.com");
server.Port = 587;
server.EnableSsl = true;
server.Credentials = new System.Net.NetworkCredential("xxx@domain.com", "123abc");
server.UseDefaultCredentials = false;
MailMessage mail = new MailMessage();
mail.From = new MailAddress("xxx@domain.com");
mail.To.Add("johndoe@domain.com");
mail.Subject = "test subject";
mail.Body = "this is my message body";
mail.IsBodyHtml = true;
try
{
server.Send(mail);
}
catch (Exception ex)
{
throw ex;
}
Run Code Online (Sandbox Code Playgroud)
错误:
我用上面的代码创建了一个简单的winform应用程序来测试电子邮件的发送...我已经在我的计算机(Windows XP)和服务器上本地测试了winform应用程序.
在这两次尝试中,我一直收到以下错误消息:
SMTP服务器需要安全连接或客户端未经过身份验证.服务器响应为:5.7.1客户端未经过身份验证.
谷歌搜索了一段时间后,我仍然没有找到原因...此外,我发现的大多数答案都是对Exchange管理控制台的引用,我们似乎没有(或安装),因此我们为什么正在使用Microsoft在线服务...
问题:
1)作为MOS的付费客户,我最初的理解是我不应该在我们的服务器上安装(或拥有)Exchange管理控制台......事实上,为了完成我的任务,这应该是完全不相关的.
2)我也尝试在我们的IIS 6.0中启用TLS,但无济于事......
3)我们正在抓住这里的稻草,因为我们似乎做的事情看起来像是一件非常微不足道的事......
4)我们应该放弃使用MOS的SMTP服务器并使用另一个服务器吗?比如Gmail的?如果是这样......那么为什么还要为MOS支付月费呢?
如果任何人有任何帮助/建议,可以帮助我阐明这一点,那将是伟大的!
真诚的文斯
哇......我相信我们找到了罪魁祸首!
通过评论这行代码:
//server.UseDefaultCredentials = false;
Run Code Online (Sandbox Code Playgroud)
一切都开始奏效了!
我现在能够在域内外发送电子邮件...
最让我困惑的是,根据文档,此UseDefaultCredentials属性的默认值设置为false
所以...当我手动将其设置为false时它不起作用但是当我对该行进行注释时(由于其默认值也将其设置为false)它可以工作!
如果这是一个已知问题,或者如果有人对此有答案,我很想知道!
小智 7
在UseDefaultCredentials属性中查看Reflector,您可以看到它还更改了trasnport.Credentials值,因此当您使用false值调用此属性时,它会将传输凭据更改为null.问题是您在此之前的行中设置凭据后调用此属性,它会使凭据无效.
如此底线,您不应该设置凭据并在之后调用此属性.