Почему System.Net.Mail не работает там, где работает System.Web.Mail
Вопрос
Я могу заставить 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);
Это моя проблема?
Решение
Я узнал ответ. Ответ:
Поскольку System.Net.Mail не поддерживает " неявное " SSL, только "явный" SSL.
Другие советы
Предыдущие ответы, касающиеся неявных и явных SSL-соединений через System.Net.Mail, абсолютно верны. Способ, которым я смог преодолеть это препятствие и без необходимости использовать устаревшую System.Web.Mail, заключался в использовании CDO (Collaborative Data Objects).
Я подробно описал и привел пример другого поста о переполнении стека ( GMail SMTP через C # .Net ошибки на всех портах ), если интересно. В противном случае вы можете перейти непосредственно к статье базы знаний по адресу http://support.microsoft.com/kb/310212. . р>
Надеюсь, это поможет!
Ответ Гимела задом наперед. Он говорит, что используйте новую библиотеку System. Net .Mail, но проблема в том, что System. Net .Mail не работает для SSL через порт 465, как System. Веб . Почта сделала / работает!
Я бился с этим весь день и при одинаковых настройках System. Веб .Mail WORKS и System. Net .Mail НЕ работает (по крайней мере, для SMTP-сервера, с которым я тестировал), и тут я подумал, что мне всегда следует обновиться до последнего предложения Microsoft, чтобы получить лучшее в жизни. : - (
Эта ссылка на блог M $, кажется, говорит обо всем; " System.Net.Mail поддерживает только & # 8220; Явный SSL & # 8221;. " и я предполагаю, что SMTP-сервер, с которым я тестировал, хочет неявного SSL. (Кстати, это сервер Yahoo).
После "обновления" новый API, несомненно, нарушит функциональность для пользователей, у которых есть серверы, которым требуется неявный SSL, и это похоже на шаг назад к «обновлению». в этом случае. Если вы все еще можете компилировать только с предупреждениями, просто отключите эти предупреждения (0618, если я помню) и продолжайте грузить. Да, и вы, возможно, захотите убедиться, что ваше приложение всегда работает с версией .NET Framework, которую вы создали и протестировали с помощью файла конфигурации, просто так в будущем, если M $ вырвет старый API, ваше приложение безопасно. Р>