【发布时间】:2011-01-24 08:48:31
【问题描述】:
鉴于Web.Config中的以下部分:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="SomeWebsite Admin <someuser@gmail.com>">
<network host="smtp.gmail.com" port="587" defaultCredentials="true" userName="someuser@gmail.com" password="somepassword" />
</smtp>
</mailSettings>
</system.net>
还有如下代码sn-p:
smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential( "someuser@gmail.com", "somepassword" );
smtp.Send( mailMessage );
上述工作正常,但是注释掉程序化覆盖,如下所示:
smtp = new SmtpClient();
//smtp.Host = "smtp.gmail.com";
//smtp.Port = 587;
smtp.EnableSsl = true;
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
//smtp.UseDefaultCredentials = false;
//smtp.Credentials = new NetworkCredential( "someuser@gmail.com", "somepassword" );
smtp.Send( mailMessage );
失败:
System.Net.Mail.SmtpException: {"The SMTP server requires a secure connection or the
client was not authenticated. The server response was: 5.5.1 Authentication Required.
Learn more at "}
是的,“learn more at”后面的空格确实存在,它让事情变得更加有趣。问题是,我不能硬编码这些值,因为它们从开发变为内部登台再到生活。所以我想知道为什么它似乎无法使用Web.Config 默认值。我想我错过了一个重要的东西吗?
* 编辑 *
这里有更多信息,查看我的 smtp 对象的值(除了 EnableSSL = true 之外没有编程覆盖):
Host = smtp.gmail.com (makes sense -- proves I'm actually editing the right Web.Config...
DeliveryMethod = Network
Port = 587
Credentials.UserName = <blank> (Problem???)
Credentials.Password = <blank> (Problem???)
Credentials.Domain = <blank>
* EDIT 的 EDIT *
缺少的Username 和Password 值以及下面接受的响应提示我解决了这个问题:Web.Config 中的defaultCredentials 必须是false。
【问题讨论】:
标签: c# authentication smtp gmail web-config