为什么System.Net.Mail在System.Web.Mail工作的地方失败

时间:2008-10-05 16:16:09

标签: .net asp.net email smtp

我可以同时使用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);

这是我的问题吗?

http://blogs.msdn.com/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx

3 个答案:

答案 0 :(得分:10)

我已经学到了答案。答案是:

因为System.Net.Mail不支持“隐式”SSL,只支持“显式”SSL。

答案 1 :(得分:2)

以前通过System.Net.Mail进行隐式和显式SSL连接的答案绝对正确。我能够通过这个障碍,而不必使用现在过时的System.Web.Mail,就是使用CDO(协作数据对象)。

如果好奇,我详细介绍了另一个堆栈溢出帖子(GMail SMTP via C# .Net errors on all ports)。否则,您可以直接转到http://support.microsoft.com/kb/310212上的知识库文章。

希望这有帮助!

答案 2 :(得分:1)

Gimel的回答又回到了前面。他说使用新系统。 Net .Mail库,但问题是系统。 Net .Mail不适用于端口465上的SSL,如System。网络。邮件确实/有效!

我整天都在反对这个问题并且设置相同的系统。网络。邮件工作和系统。网络。邮件不起作用(至少对于我一直在测试的SMTP服务器),在这里我认为我应该总是升级到微软的最新产品,以获得最好的生活。 : - (

M $博客的链接似乎说明了一切; “System.Net.Mail仅支持”显式SSL“。”我假设我一直在测试的SMTP服务器需要隐式SSL。 (这是一个雅虎服务器顺便说一句。)

由于“升级”到新API无疑会破坏具有需要隐式SSL的服务器的用户的功能,因此在这种情况下似乎向后退一步“升级”。如果您仍然可以仅使用警告进行编译,则只需禁用这些警告(如果我记得,则为0618)并继续进行卡车运输。哦,您可能需要考虑确保您的应用程序始终针对您构建并通过配置文件进行测试的.NET框架版本运行,以便将来如果M $淘汰旧API您的应用程序是安全的。