为什么System.Net.Mail在System.Web.Mail工作的地方失败
题
我可以同时使用System.Net.Mail和System.Web.Mail来处理GMail,但是我无法让它们与smtp.att.yahoo.com一起使用。
我从自己的Web.config键获取SMTP设置。使用System.Web.Mail发送时这些设置有效,但System.Net.Mail失败。
<add key="SmtpServer" value="smtp.att.yahoo.com"/>
<add key="SmtpServerAuthenticateUser" value="ctrager@sbcglobal.net"/>
<add key="SmtpServerPort" value="465"/>
<add key="SmtpUseSSL" value="1"/>
<add key="SmtpServerAuthenticatePassword" value="MY PASSWORD"/>
以下是抓取我的设置并与GMail一起使用的代码,使用att.yahoo失败:
SmtpClient smtp;
if (!string.IsNullOrEmpty(Util.get_setting("SmtpServer", "")))
{
smtp = new SmtpClient(Util.get_setting("SmtpServer", ""));
}
else
{
smtp = new SmtpClient();
}
if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerAuthenticatePassword", "")))
smtp.Credentials = new System.Net.NetworkCredential(
Util.get_setting("SmtpServerAuthenticateUser", ""),
Util.get_setting("SmtpServerAuthenticatePassword", ""));
if (!string.IsNullOrEmpty(Util.get_setting("SmtpServerPort", "")))
smtp.Port = int.Parse(Util.get_setting("SmtpServerPort", ""));
if (Util.get_setting("SmtpUseSSL", "0") == "1")
smtp.EnableSsl = true;
smtp.Send(message);
这是我的问题吗?
解决方案
我已经学到了答案。答案是:
因为System.Net.Mail不支持“隐式” SSL,仅“明确” SSL
其他提示
以前通过System.Net.Mail进行隐式和显式SSL连接的答案绝对正确。我能够通过这个障碍,而不必使用现在过时的System.Web.Mail,就是使用CDO(协作数据对象)。
我详细介绍了另一个堆栈溢出帖子( GMail SMTP通过所有端口上的C#.Net错误)如果好奇的话。否则,您可以直接转到 http://support.microsoft.com/kb/310212上的知识库文章。 。
希望这有帮助!
Gimel的回答又回到了前面。他说使用新系统。 Net .Mail库,但问题是系统。 Net .Mail不适用于端口465上的SSL,如System。网络。邮件确实/有效!
我整天都在反对这个问题并且设置相同的系统。网络。邮件工作和系统。网络。邮件不起作用(至少对于我一直在测试的SMTP服务器),在这里我认为我应该总是升级到微软的最新产品,以获得最好的生活。 : - (
M $博客的链接似乎说明了一切; “System.Net.Mail仅支持&#8220;显式SSL&#8221;。”我假设我一直在测试的SMTP服务器需要隐式SSL。 (这是一个雅虎服务器顺便说一句。)
自“升级”以来毫无疑问,对于具有需要隐式SSL的服务器的用户而言,新API无疑会破坏其功能,这似乎是向后退步到“升级”的步骤。在这种情况下。如果您仍然可以仅使用警告进行编译,则只需禁用这些警告(如果我记得,则为0618)并继续进行卡车运输。哦,您可能需要考虑确保您的应用程序始终针对您构建并通过配置文件进行测试的.NET框架版本运行,以便将来如果M $淘汰旧API您的应用程序是安全的。