2013-08-29 2 views
56

Я хочу, чтобы отправить письмо от моего приложения, и я написал следующий код для отправки почтыДля SMTP-сервера требуется безопасное соединение, или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация?

MailMessage msg = new MailMessage(); 

    msg.From = new MailAddress("mymailid"); 
    msg.To.Add("receipientid"); 
    msg.Subject = "test"; 
    msg.Body = "Test Content"; 
    msg.Priority = MailPriority.High; 

    SmtpClient client = new SmtpClient(); 

    client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com"); 
    client.Host = "smtp.gmail.com"; 
    client.Port = 587; 
    client.DeliveryMethod = SmtpDeliveryMethod.Network; 
    client.EnableSsl = true; 
    client.UseDefaultCredentials = true; 

    client.Send(msg); 

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

Когда я посылаю кнопку он дает ошибку, как

Сервер SMTP требует защищенного соединения или клиент не прошел проверку подлинности . Ответ сервера: 5.5.1 Аутентификация Обязательный параметр.

код в файле Web.config

<appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="smtpServer" value="smtp.gmail.com" /> 
    <add key="EnableSsl" value = "true"/> 
    <add key="smtpPort" value="587" /> 
    <add key="smtpUser" value="[email protected]" /> 
    <add key="smtpPass" value="mypassword" /> 
    <add key="adminEmail" value="[email protected]" /> 
    </appSettings> 
    <system.net> 
    <mailSettings> 
     <smtp from="[email protected]"> 
     <network host="smtp.gmail.com" password="mypassword" port="587" userName="[email protected]" enableSsl="true"/> 
     </smtp> 
    </mailSettings> 
    </system.net> 

, что я должен сделать, чтобы решить эту ошибку и отправить почту ??

+1

попробовать в порт 465 – Ehsan

+0

возможный дубликат [Отправка электронной почты в .NET через Gmail] (http://stackoverflow.com/questions/32260/sending-email-in-net-through-gmail) –

+0

Думаю, вам, возможно, придется обратиться к этому ответу: http : //stackoverflow.com/a/9572958/1136253 –

ответ

26

Сначала проверьте наличие проблем, связанных с защитой gmail. Возможно, вы включили двойную аутентификацию в gmail. Также проверьте входящие почтовые ящики gmail, если вы получаете предупреждения о безопасности. В таких случаях проверить другой ответ @mjb ниже

Ниже очень общее дело, что я всегда проверяю первые такие вопросы

client.UseDefaultCredentials = true; 

установить его ложь.

Примечание @Joe короля answer - вы должны установить client.UseDefaultCredentials перед тем вы установили client.Credentials

+16

Я пробовал, но это не работает для меня. –

+5

+1 для обмена. работал для меня, спасибо :) –

+1

Я пробовал, но он не работает для меня –

7

Попробуйте это так, я просто сделал некоторые легкие изменения:

MailMessage msg = new MailMessage(); 

msg.From = new MailAddress("[email protected]"); 
msg.To.Add("[email protected]"); 
msg.Subject = "test"; 
msg.Body = "Test Content"; 
//msg.Priority = MailPriority.High; 


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

    client.Send(msg); 
} 

Кроме того, пожалуйста, покажите ваш файл app.config, если у вас есть настройки почты.

+0

Я еще не настроил (а). что мне там писать? –

+0

нет файла app.config в моем приложении mvc. –

8

Попробуйте войти в свою учетную запись Gmail. он блокируется, если вы отправляете электронные письма с помощью gmail SMTP. Я не знаю предела писем, которые вы можете отправить, прежде чем он будет заблокирован, но если вы входите в систему один раз, то он снова работает с кодом. убедитесь, что настройки вашего веб-интерфейса хороши.

+0

Лучший ответ действительно! Я снова вошел в систему, и все получилось! PS: Я должен был предоставить капчу в Google – Bellash

+0

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

1

Ниже мой code.I также имел ту же ошибку, но проблема заключалась в том, что я дал мой пароль wrong.The ниже код будет работать perfectly..try он

  MailMessage mail = new MailMessage(); 
      SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");    
      mail.From = new MailAddress("[email protected]"); 
      mail.To.Add("[email protected]"); 
      mail.To.Add("[email protected]"); 
      mail.Subject = "Password Recovery "; 
      mail.Body += " <html>"; 
      mail.Body += "<body>"; 
      mail.Body += "<table>"; 

      mail.Body += "<tr>"; 
      mail.Body += "<td>User Name : </td><td> HAi </td>"; 
      mail.Body += "</tr>"; 

      mail.Body += "<tr>"; 
      mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>"; 
      mail.Body += "</tr>"; 

      mail.Body += "</table>"; 
      mail.Body += "</body>"; 
      mail.Body += "</html>"; 

      mail.IsBodyHtml = true; 
      SmtpServer.Port = 587; 
      SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password"); 
      SmtpServer.EnableSsl = true; 

      SmtpServer.Send(mail); 

Вы можете Reffer его в Sending mail

3

Я столкнулся с той же проблемой, даже если установить «UseDefaultCredentials» в false. Позже я обнаружил, что основной причиной является то, что я включил «2-ступенчатую проверку» в своей учетной записи. После того, как я выключил его, проблема исчезла.

+4

Не выключайте 2-х ступенчатую проверку. Это не так.Вы можете создать пароль для конкретного приложения в настройках GMail и использовать его в SmtpClient. Вы должны делать это независимо от того, чтобы выставлять обычный пароль. –

79

У меня такая же проблема.

Я нашел это решение:

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

Некоторые примеры приложений, которые не поддерживают новейшие стандарты безопасности включают в себя:

  • Почтового приложение на вашем iPhone или IPad с прошивкой 6 или ниже
  • Почтового приложение на ваш телефон Windows, предшествующее 8,1 релиз
  • Некоторые почтовые клиенты рабочего стола, такие как Microsoft Outlook и Mozilla Thunderbird

Таким образом, ч ave, чтобы включить Менее безопасный вход в свою учетную запись google.

После входа в учетную запись Google, перейдите по ссылке:

https://www.google.com/settings/security/lesssecureapps

В C#, вы можете использовать следующий код:

using (MailMessage mail = new MailMessage()) 
{ 
    mail.From = new MailAddress("[email protected]"); 
    mail.To.Add("[email protected]"); 
    mail.Subject = "Hello World"; 
    mail.Body = "<h1>Hello</h1>"; 
    mail.IsBodyHtml = true; 
    mail.Attachments.Add(new Attachment("C:\\file.zip")); 

    using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587)) 
    { 
     smtp.Credentials = new NetworkCredential("[email protected]", "password"); 
     smtp.EnableSsl = true; 
     smtp.Send(mail); 
    } 
} 

----------- --------
Информация предоставлена ​​Michael Freidgeim в комментариях ниже:
Похожие ответы и скриншоты https://stackoverflow.com/a/32457468/52277

+6

он работал плюс +1 для обмена –

+1

Единственное решение, которое действительно сработало! Браво!! – HussainMarvi

+0

Это вместе с гарантией того, что SSL был включен в коде, сработал чудеса, спасибо большое – Crouch

28

Убедитесь, что вы установили SmtpClient.Credentialsпосле, вызывая SmtpClient.UseDefaultCredentials = false.

Порядок важен, так как установка SmtpClient.UseDefaultCredentials = false сбрасывает SmtpClient.Credentials на null.

+2

Я искал решение этого в течение получаса, твой - единственное небольшое сообщение в Интернете, которое я нашел, который упоминает порядок этого. Спасибо друг. –

+4

@ Joe King Вы просто классный помощник ..... искал это с 3 часов :) – Jatin

+1

Спасибо @ Joe King, что является важной информацией, отсутствующей в документах MS. Это было решением проблемы с отправкой с именем пользователя и паролем. – Aaron

0

некоторые серверы SMTP (безопасные них) требует, чтобы предоставить как имя пользователя и адрес электронной почты, если его Gmail, то большинство шансов сво «Меньше Secure Sign-In» вопрос нужно решить, в противном случае вы можете попробовать:

public static void SendEmail(string address, string subject, 
    string message, string email, string username, string password, 
    string smtp, int port) 
{ 
    var loginInfo = new NetworkCredential(username, password); 
    var msg = new MailMessage(); 
    var smtpClient = new SmtpClient(smtp, port); 

    msg.From = new MailAddress(email); 
    msg.To.Add(new MailAddress(address)); 
    msg.Subject = subject; 
    msg.Body = message; 
    msg.IsBodyHtml = true; 

    smtpClient.EnableSsl = true; 
    smtpClient.UseDefaultCredentials = false; 
    smtpClient.Credentials = loginInfo; 
    smtpClient.Send(msg); 
} 

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

вызова этого метода может быть сделано следующим образом:

SendEmail("[email protected]", "test", "Hi it worked!!", 
    "from-mail", "from-username", "from-password", "smtp", 587); 
2

enter image description here Убедитесь, что доступ менее безопасным приложение допускается.

 MailMessage mail = new MailMessage(); 
     mail.From = new MailAddress("[email protected]"); 
     mail.Sender = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 
     mail.IsBodyHtml = true; 
     mail.Subject = "Email Sent"; 
     mail.Body = "Body content from"; 

     SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); 
     smtp.UseDefaultCredentials = false; 

     smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "xx"); 
     smtp.DeliveryMethod = SmtpDeliveryMethod.Network; 
     smtp.EnableSsl = true; 

     smtp.Timeout = 30000; 
     try 
     { 

      smtp.Send(mail); 
     } 
     catch (SmtpException e) 
     { 
      textBox1.Text= e.Message; 
     } 
+0

Как вы это делаете? – drizzie

+0

Перейдите в настройки учетной записи Google и измените ее. –

+1

Ссылка на настройку «Доступ менее защищенного приложения» находится здесь - https://www.google.com/settings/security/lesssecureapps Изменение настройки не помогло мне преодолеть ошибку – mvark

1

Если это новая учетная запись google, вам необходимо отправить электронное письмо (первое) через обычный пользовательский интерфейс. После этого вы можете использовать приложение/робот для отправки сообщений.

1

Вы должны рассмотреть, чтобы указать данные конфигурации SMTP в конфигурационном файле и не перезаписывать их в коде - просмотреть данные конфигурации SMTP на http://www.systemnetmail.com/faq/4.1.aspx

<system.net> 
      <mailSettings> 
       <smtp deliveryMethod="Network" from="[email protected]"> 
        <network defaultCredentials="false" host="smtp.example.com" port="25" userName="[email protected]" password="password"/> 
       </smtp> 
      </mailSettings> 
     </system.net> 
1

Включите менее безопасное приложение из этого link и бума ...

+0

Это сработало для меня .. Это должен быть принятый ответ – Noman

11

Я искал и пробовал разные вещи в течение нескольких часов ..Подводя итог, я должен был принять во внимание следующие моменты:

  1. Используйте smtp.gmail.com вместо smtp.google.com
  2. Используйте порт 587
  3. Установите client.UseDefaultCredentials = false; прежде чем устанавливать учетные данные
  4. Включите Access for less secure apps
  5. Set client.EnableSsl = true;

Если эти teps не помогло, проверьте это answer.
Возможно, вы можете найти что-то полезное на этом System.Net.Mail FAQ тоже.

+0

Этот ответ очень полезен ... решил мою проблему. большое спасибо – Hari

0

После поворота less secure option on и пробовать другие решения, если вы по-прежнему сталкиваются с той же проблемой пытаются использовать эту перегрузку:

client.Credentials = new NetworkCredential("mymailid", "mypassword"); 

вместо:

client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com"); 
Смежные вопросы

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