6

我可以让 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

4

3 回答 3

10

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

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

于 2008-10-06T00:43:23.200 回答
2

先前关于通过 System.Net.Mail 的隐式和显式 SSL 连接的答案是绝对正确的。我能够克服这个障碍并且不必使用现在已经过时的 System.Web.Mail 的方法是使用 CDO(协作数据对象)。

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

希望这可以帮助!

于 2010-10-03T12:39:28.113 回答
1

Gimel 的回答是从头到尾。他说使用新系统。Net .Mail 库,但问题是系统。Net .Mail 不适用于 465 端口上的 SSL,如 System。Web .Mail 确实/确实有效!

我整天都在为此而努力,并且为了相同的设置系统。Web .Mail WORKS 和系统。Net .Mail 不起作用(至少对于我一直在测试的 SMTP 服务器而言),在这里我想我应该始终升级到 Microsoft 的最新产品,以获得最好的生活。:-(

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

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

于 2010-03-10T07:03:54.410 回答