SMTP-аутентификация с помощью настроек файла MailSettings - PullRequest
17 голосов
/ 01 сентября 2010

Я храню свои MailSettings в файле web.config, однако когда я отправляю сообщение, мой SMTP-сервер сообщает, что мне нужно использовать аутентификацию. У меня есть имя пользователя / пароль в файле конфигурации, но все равно не получается.

Это работает, если я делаю следующее, но это кажется дополнительным шагом. Разве он не должен просто взять его из файла конфигурации и автоматически использовать аутентификацию?

System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(
    HttpContext.Current.Request.ApplicationPath);
MailSettingsSectionGroup settings =
    (MailSettingsSectionGroup) config.GetSectionGroup("system.net/mailSettings");

SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential(
   settings.Smtp.Network.UserName, settings.Smtp.Network.Password);

Web.config

<system.net>
    <mailSettings>
        <smtp from="me@xyz.com" deliveryMethod="Network">
            <network host="mail.xyz.com" defaultCredentials="true"
                userName="me@xyzcom" password="abc123" />
        </smtp>
    </mailSettings>
 </system.net>

System.Net.Mail.SmtpException

Превышено выделение памяти. ответ сервера был: Пожалуйста, используйте SMTP аутентификация. Увидеть http://www.myISP.com/support/smtp-authentication.aspx

«Превышено выделение памяти» смущало нас довольно долго, теперь мы его игнорируем. Похоже, важна «проверка подлинности по протоколу SMTP».

Ответы [ 2 ]

27 голосов
/ 22 октября 2010

Разница между кодированным подходом и web.config только подходом заключается в том, что последний имеет defaultCredentials="true" установленный Это предотвращает использование имени пользователя и пароля для аутентификации при таком подходе. Я думаю, что проблему можно решить, установив для нее значение «false» (или полностью удалив ее, потому что «false» является значением по умолчанию).

1 голос
/ 01 сентября 2010

Класс SmtpClient должен использовать параметры аутентификации без необходимости явного считывания имени пользователя или пароля из конфигурации. Смотри http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx

Можете ли вы опубликовать сегмент System.Net из вашей конфигурации? Кроме того, вы можете опубликовать точную ошибку, которую вы получаете от SMTP-сервера?

...