2015-08-26 12 views
1

Я создал консольное приложение для отправки электронной почтыSMTP исключение «отказ отправки почты»

public static void sendEmail(string email, string body) 
    { 
     if (String.IsNullOrEmpty(email)) 
      return; 
     try 
     { 
      MailMessage mail = new MailMessage(); 
      mail.To.Add(email); 
      mail.From = new MailAddress("[email protected]"); 
      mail.Subject = "sub"; 

      mail.Body = body; 

      mail.IsBodyHtml = true; 
      SmtpClient smtp = new SmtpClient(); 
      smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address 
      smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "[email protected]"); // ***use valid credentials*** 
      smtp.Port = 587; 

      //Or your Smtp Email ID and Password 
      smtp.EnableSsl = true; 
      smtp.Send(mail); 
     } 
     catch (Exception ex) 
     { 

     } 
    } 

Я использую правильный верительных моего аккаунта Gmail.

Есть ли какие-либо настройки Мне нужно сделать для GMail Account?

+1

Можете ли вы отправить сообщение целиком исключение. Кроме того, в настройках безопасности gmail разрешите менее безопасные приложения. – user1666620

+0

Если я правильно помню, GMail поддерживает только SMTPS-доступ. –

+0

Я включил ** менее безопасные приложения. ** Его работа так благодарит вас. –

ответ

3

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

Для SMTP-сервера требуется защищенное соединение, или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация.

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

smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address 
// ** HERE! ** 
smtp.UseDefaultCredentials = false; 
// *********** 
smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "[email protected]"); // ***use valid credentials*** 
smtp.Port = 587; 

Вам также необходимо перейти сюда и включить менее безопасные приложения.

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

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

Я только что проверил и проверил, что это работает в моей учетной записи с двумя шагами. Черт, вот мой весь метод, скопированный прямо из LINQPad, если он поможет (с удаленной детализацией, конечно).

var fromAddress = new MailAddress("[email protected]", "My Name"); 
var toAddress = new MailAddress("[email protected]", "Mr Test"); 
const string fromPassword = "tbhagpfpcxwhkczd"; 
const string subject = "test"; 
const string body = "HEY, LISTEN!"; 

var smtp = new SmtpClient 
{ 
    Host = "smtp.gmail.com", 
    Port = 587, 
    EnableSsl = true, 
    DeliveryMethod = SmtpDeliveryMethod.Network, 
    UseDefaultCredentials = false, 
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword), 
    Timeout = 20000 
}; 

using (var message = new MailMessage(fromAddress, toAddress) 
{ 
    Subject = subject, 
    Body = body 
}) 
{ 
    smtp.Send(message); 
} 

Edit:

Использование вложения:

using (var message = new MailMessage(fromAddress, toAddress) 
{ 
    Subject = subject, 
    Body = body 
}) 
{ 
    Attachment attachment = new Attachment(filePath); 
    message.Attachments.Add(attachment); 

    smtp.Send(message); 
} 
+0

Здесь как можно использовать ** Приложения **? –

+1

Добавлено в пример вложений :-) – Equalsk

+0

Эй, это работает спасибо. –

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