Почему System.Net.Mail не работает там, где работает System.Web.Mail - PullRequest
6 голосов
/ 05 октября 2008

Я могу заставить System.Net.Mail и System.Web.Mail работать с GMail, но я не могу заставить их обоих работать с smtp.att.yahoo.com.

Я получаю настройки SMTP из своих собственных ключей Web.config. Эти настройки работают, когда я отправляю с использованием 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 ]

10 голосов
/ 06 октября 2008

Я узнал ответ. Ответ:

Поскольку System.Net.Mail не поддерживает «неявный» SSL, только «явный» SSL.

2 голосов
/ 03 октября 2010

Предыдущие ответы, касающиеся неявных и явных SSL-соединений через System.Net.Mail, абсолютно верны. Способ, которым я смог преодолеть это препятствие и без необходимости использовать устаревшую System.Web.Mail, заключался в использовании CDO (Collaborative Data Objects).

Я подробно описал и привел пример с другим сообщением о переполнении стека ( GMail SMTP через C # .Net ошибки на всех портах ), если интересно. В противном случае вы можете перейти непосредственно к статье базы знаний по адресу http://support.microsoft.com/kb/310212.

Надеюсь, это поможет!

1 голос
/ 10 марта 2010

Gimel ответ обратно вперед. Он говорит, что используйте новую библиотеку System. Net .Mail, но проблема в том, что System. Net .Mail не работает для SSL через порт 465, как System. Web . Почта сделала / работает!

Я бился с этим весь день и при одинаковых настройках System. Web .Mail WORKS и System. Net .Mail НЕ работает (по крайней мере, для SMTP-сервер, на котором я тестировал), и тут я подумал, что мне всегда следует обновиться до последнего предложения Microsoft, чтобы получить лучшее в жизни. : - (

Эта ссылка на блог M $, кажется, утверждает все это; «System.Net.Mail поддерживает только« Явный SSL ».» и я предполагаю, что SMTP-сервер, с которым я тестировал, хочет неявного SSL. (Кстати, это сервер Yahoo).

Поскольку «обновление» до нового API, без сомнения, нарушит функциональность пользователей, у которых есть серверы, которым требуется неявный SSL, в этом случае кажется шагом назад к «обновлению». Если вы все еще можете компилировать только с предупреждениями, просто отключите эти предупреждения (0618, если я помню) и продолжайте грузить. Да, и вы, возможно, захотите убедиться, что ваше приложение всегда работает с версией .NET Framework, которую вы создали и протестировали с помощью файла конфигурации, просто так в будущем, если M $ вырвет старый API, ваше приложение безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...