2016-01-22 3 views
4

Я разработал приложение ASP.net, которое может отправить электронное письмо в любой домен. Я использую простой .Net Smtp клиент:Как выполнить проверку подлинности любому почтовому провайдеру с помощью DotNetOpenAuth?

var fromAddress = new MailAddress("[email protected]"); 
var fromPassword = "xxxxxx"; 
var toAddress = new MailAddress("[email protected]"); 

var smtpClient = new System.Net.Mail.SmtpClient 
    { 
     Host = "smtp.gmail.com",// or any others 
     Port = 587, // correspond to host 
     EnableSsl = true, 
     DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network, 
     UseDefaultCredentials = false, 
     Credentials = new NetworkCredential(fromAddress.Address, fromPassword) 
    }; 

smtpClient.Send(message). Но я не могу аутентифицироваться для любых современных почтовых провайдеров (включая gmail, yahoo, yandex), используя .Net.Mail, потому что у меня есть следующее исключение. The server response was: 5.5.1 Authentication Required

Все правильное заполнение конфигурации smtp.

Как использовать DotNetOpenAuth для аутентификации и .Net.Smtp для отправки электронных писем? Просьба привести пример.

+1

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

+0

Вам легче помочь, если вы разместите несколько примеров кода. Код, который показывает, как вы публикуете это, поможет. –

+0

@KarlGjertsen обновил вопрос –

ответ

0

ОК, я знаю, я добавляю много ответов, но вот мои выводы после того, как смотреть на это в течение нескольких часов:

The error is the client is not authenticated (5.5.1)

Я получил ту же ошибку, то я заметил по электронной почте в мой почтовый ящик (учетная запись gmail редко используется) Someone tried to sign in to your Google Account [email protected] from an app that doesn't meet modern securty standards.

Возможно, приложение заблокировано Google: http://security.google.com/settings/security/activity может показывать ваше приложение, но вы получаете электронное письмо?

Кроме того, если учетная запись использует 2 аутентификации шаг, электронная почта не будет отправлено без установки пароля приложения: https://support.google.com/accounts/answer/185833

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

+0

Да, у меня есть одно и то же сообщение «Кто-то пытался войти в ваш аккаунт Google [email protected] из приложения, которое не соответствует современным стандартам безопасности». –

+0

Gmail блокирует запрос. В коде нет ничего плохого. SendGrid не принимает EnableSsl, поэтому вы получили немного другую ошибку. –

+0

Итак, мой пользователь должен использовать двухэтапную аутентификацию? –

4

Я бы рассмотрел ваш SMTP-сервер. Позволяет ли вы отправлять электронную почту? Ваш запрос поступает на сервер и проверяется? Вы просмотрели трафик, используя Fiddler?

Вы можете подписаться на бесплатную учетную запись с SendGrid, которая предоставит вам SMTP-сервер для отправки электронной почты для вас. Вы действительно лучше используете компанию, такую ​​как SendGrid, вместо SMTP-сервера gmail.

Кроме этого, Mail4Net может помочь вам в вашем коде.

Чтобы использовать GMail в качестве SMTP-сервер, вы должны установить некоторые значения:

Outgoing Mail (SMTP) Server: smtp.gmail.com 
Use Authentication: Yes 
Use Secure Connection: Yes (this can be TLS or SSL depending on your mail client) 
Username: your GMail account, i.e. [email protected] 
Password: your GMail password 
Port: 465 or 587 

Вы также можете переместить подключение к веб или приложение конфигурационного файла:

<configuration> 

    <system.net> 
    <mailSettings> 
     <smtp deliveryMethod="network" from="[email protected]"> 
     <network 
      host="smtp.gmail.com" 
      port="465" 
      enableSsl="true" 
      userName="[email protected]" 
      password="password" 
     /> 
     </smtp> 
    </mailSettings> 
    </system.net> 

</configuration> 
+0

Итак, вы думаете, что мне нужно установить 'Use Authentication: Yes'? –

+0

Но 'smtpClient' не имеет такого свойства –

+0

Это не свойство, но вам нужно пройти аутентификацию, какой вы есть. Вы пробовали использовать другой номер порта? Ваши порты блокируются вашим интернет-провайдером? Вы можете попробовать запустить Fiddler и посмотреть, проходит ли трафик или блокируется: https://www.telerik.com/download/fiddler –

0

Этот код работает для меня после того, как электронной почты и учетных данные будут обновлены:

try 
    { 

    var message = new MailMessage(); 

    message.Subject = "Test email"; 
    message.Body = "This is a test message"; 
    message.From = new MailAddress("[email protected]"); 
    message.To.Add(new MailAddress("[email protected]")); 

    var client = new SmtpClient 
    { 
     Host = "smtp.sendgrid.com", 
     Port = 587, 
     Credentials = new NetworkCredential("User_Name", "My_Password") 
    }; 

    client.Send(message); 

    } 
    catch (Exception ex) 
    { 
    var msg = ex.Message; 
    } 

Убедитесь, что ваши SendGrid учетных данных корр ЭСТ.

+0

Вы разрешаете менее безопасные приложения? И что вы подразумеваете под «как только электронная почта и учетные данные обновляются»? У меня есть только одно электронное письмо и учетные данные. –

+0

А что такое учетные данные SendGrid? Вы имеете в виду учетные данные, которые я использую для входа в свою учетную запись Gmail? –

+0

Не разрешается использование менее безопасных приложений. Вам необходимо изменить адреса электронной почты и учетные данные SendGrid. –

0

Из комментариев, я могу видеть image, показывая, что вы пытаетесь сделать:

Однако, вы не можете знать, какие конфигурации будут и пользователи будут выбирать конфигурации, которые не правильно. Что вы будете делать, если пользователь выбирает TLS, но поддержка TLS от почтового сервера отсутствует?

Я думаю, вам нужно добавить кнопку «Отправить тестовую электронную почту», чтобы отправить тестовое письмо, чтобы проверить конфигурацию. Затем вы можете выявить все возникающие ошибки.

+0

Да, у меня уже есть эта кнопка. –

+0

Если вы удалите EnableSsl из кода, это работает? –

+0

Если я удалю tls, тогда у меня будет 'SMTP-сервер требует безопасного соединения, или клиент не был аутентифицирован. Ответ сервера: 5.7.0. Сначала необходимо выполнить команду STARTTLS. b5sm867834lbc.14 - gsmtp' –

Смежные вопросы