背景:
我们是一家规模较小的公司,没有Exchange服务器(或专职员工),但仍需要发送和接收电子邮件。
我们决定使用Microsoft Online Services (MOS)
目标:
我们有一个Web服务器(Windows Server 2003 R2 with IIS 6.0)并部署了一个C# ASP.Net MCV应用程序。
每当用户创建帐户时,Web应用程序都需要发送电子邮件。
根据文档,我们需要使用端口(587)并确保启用传输层安全(TLS)。此外,使用的FROM地址必须是“Authoritative”类型,在我通过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;
}
错误:
我创建了一个简单的winform应用程序,使用上述代码来测试发送邮件… 我在我的计算机(Windows XP)和服务器上进行了本地的winform应用程序测试。
无论哪种尝试,我都不断收到以下错误消息:
SMTP服务器需要安全连接或客户端未经身份验证。 服务器响应为:5.7.1客户端未经身份验证。
通过谷歌搜索一段时间后,我仍然没有找到原因…此外,我找到的大多数答案都提到了我们似乎没有(或未安装)的Exchange管理控制台,这就是为什么我们使用Microsoft在线服务的原因…
问题:
1)作为MOS的付费客户,我的最初理解是我不应该在我们的服务器上安装(或拥有)Exchange管理控制台…实际上,为了完成我的任务,这应该是完全无关紧要的。
2)我还尝试在我们的IIS 6.0中启用TLS,但无济于事…
3)我们在这里像抓住稻草一样,因为我们所做的看起来非常微不足道…
4)我们应该放弃使用MOS的SMTP服务器并使用另一个吗? 比如Gmail的? 如果是这样,为什么要费心为MOS支付每月的费用呢?
如果有任何人能给我提供帮助/建议来帮助我解决这个问题,那将太棒了!
真诚地, Vince
哇…我相信我们找到了罪魁祸首!!!
通过注释掉这行代码:
//server.UseDefaultCredentials = false;
一切都开始正常工作了!
现在我可以发送内部和外部域的电子邮件了...
最令我困惑的是,根据文档,UseDefaultCredentials
属性的默认值应该是false
所以...当我手动将其设置为false时它不起作用,但是当我注释掉这行代码(它也会因其默认值而被设置为false)时它就可以工作了!
如果这是一个已知的问题,或者有人能够回答这个问题,我很想知道!