Подтвердить что ты не робот

GMail + С# + Web.Config: отправка почты работает программно, исключает исключение с использованием значений Web.Config

Учитывая следующий раздел в Web.Config:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" from="SomeWebsite Admin &lt;[email protected]&gt;">
            <network host="smtp.gmail.com" port="587" defaultCredentials="true" userName="[email protected]" password="somepassword" />
        </smtp>
    </mailSettings>
</system.net>

И следующий фрагмент кода:

                smtp   = new SmtpClient();

                smtp.Host = "smtp.gmail.com";
                smtp.Port = 587;
                smtp.EnableSsl = true;
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new NetworkCredential( "[email protected]", "somepassword" );

                smtp.Send( mailMessage );

Вышеизложенное прекрасно работает, но комментирует программные переопределения, например:

                smtp   = new SmtpClient();

                //smtp.Host = "smtp.gmail.com";
                //smtp.Port = 587;
                smtp.EnableSsl = true;
                //smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                //smtp.UseDefaultCredentials = false;
                //smtp.Credentials = new NetworkCredential( "[email protected]", "somepassword" );

                smtp.Send( mailMessage );

сбой:

System.Net.Mail.SmtpException: {"The SMTP server requires a secure connection or the 
client was not authenticated. The server response was: 5.5.1 Authentication Required. 
Learn more at                              "}

Да, пустое место после "узнайте больше" на самом деле есть, и это приносит дополнительные удовольствия. Дело в том, что я не могу жестко кодировать эти ценности, поскольку они меняются от разработки к внутренней постановке, чтобы жить. Поэтому мне интересно, почему он не работает с параметрами Web.Config по умолчанию. Я полагаю, что у меня отсутствует одно критическое что-то другое?

* РЕДАКТИРОВАТЬ *

Вот еще несколько сведений, рассматривающих значения моего объекта smtp (без программных переопределений, кроме EnableSSL = true):

Host = smtp.gmail.com (makes sense -- proves I'm actually editing the right Web.Config...
DeliveryMethod = Network
Port = 587
Credentials.UserName = <blank> (Problem???)
Credentials.Password = <blank> (Problem???)
Credentials.Domain = <blank>

* EDIT EDIT *

Отсутствующие значения Username и Password и принятый ответ ниже привели меня в проблему: defaultCredentials в Web.Config должен быть false.

4b9b3361

Ответ 1

Для конечных пользователей, правильных способов сделать это:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" from="SomeWebsite Admin &lt;[email protected]&gt;">
            <network host="smtp.gmail.com" port="587" enableSsl="true" defaultCredentials="false" userName="[email protected]" password="somepassword" />
        </smtp>
    </mailSettings>
</system.net>

И тогда ваш код:

           smtp   = new SmtpClient();
           smtp.Send( mailMessage );

Ответ 2

Я не знаком с работой этого способа, но в файле web.config defaultCredentials верно, вы устанавливаете значение false при его программном программировании в том, что разница?

Ответ 3

Я думаю, эта часть должна быть < smtp deliveryMethod = "Сеть" from = "SomeWebsite Admin < [email protected] > " > Как это < smtp deliveryMethod = "Сеть" from = "[email protected]" >

Ответ 4

это конфигурация, которая отлично сработала для меня:

<system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="[email protected]">
        <network defaultCredentials="false" host="smtp.gmail.com" port="587"  userName="my-username" password="my-password"/>
      </smtp>
    </mailSettings>
  </system.net>

нет способа добавить параметр SSL в сетевой тег. Вам нужно будет установить его из кода:

var smtpClient = new SmtpClient();
smtpClient.EnableSsl = true;
smtpClient.Send(message);

Если вы не хотите отправлять электронные письма с помощью внешнего smtp, вы можете настроить его на использование localhost и использовать настольный почтовый приемник, например PaperCut (http://papercut.codeplex.com/). Это конфигурация для этого:

<system.net>
    <mailSettings>
      <smtp>
        <network host="127.0.0.1" port="25" />
      </smtp>
    </mailSettings>
  </system.net>

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

Ответ 5

Невозможно указать, следует ли использовать SSL/Secure соединение при определении параметров почты в файле веб-конфигурации.

Я уверен, почему вы получаете сообщение об ошибке.

Один из способов решения этой проблемы - создать свою собственную почтовую упаковку, а затем использовать ее в своем приложении, но вы, вероятно, уже получили это:)

Это становится более сложным при использовании элементов управления членством .net, таких как забытый пароль, создание пользователя и т.д. Способ решения этого вопроса - переопределить событие SendingMail, а затем установить Свойство EnableSSL для mailclient равно true.

Надеюсь, я смог помочь:)

Ответ 6

Если вы используете двухэтапную аутентификацию, не забудьте создать пароль для конкретного приложения и использовать его, а не пароль, который вы используете для входа в Gmail.

(Извините, я не могу добавить это в качестве комментария. Недостаточно репутации во время публикации этого сообщения.)