2015-08-27 2 views
-3

Я не могу отправить почту через C#, когда я нажимаю отправить кнопку электронной почты будет застрял мой код этоОтправка электронной почты через C# Windows форм Appication

   MailMessage message = new MailMessage(); 
      SmtpClient smtp = new SmtpClient(); 
      message.From = new MailAddress("[email protected]"); 
      message.To.Add(new MailAddress("[email protected]")); 
      message.Subject = "Subject"; 
      message.Body = "Body"; 
      smtp.Host = "smtp.gmail.com"; 
      smtp.Port = 465; 
      smtp.EnableSsl = true; 
      smtp.Credentials = new NetworkCredential("[email protected]", "password"); 
      smtp.Send(message); 
+3

[не работает] (http: //www.learn- cocos2d.com/2014/10/missing-stackoverflow-topic-terrible-question/) – EZI

+0

Какая ошибка вы получаете? –

+0

Ничто не застряло –

ответ

3

Вы используете не тот порт для SMTP в Gmail, то правильный номер порта - 587. Кроме того, я рекомендую использовать Use Statement для SmtpClient, поскольку он реализует интерфейс IDisposable.

Даже после изменения порта на правильный, вы все равно можете столкнуться с исключением, поскольку Gmail использует SSL для аутентификации. Вам нужно будет добавить проверку удаленного сервера. Это можно сделать с помощью RemoteCertificateValidationCallback Delegate, который проверяет сертификат удаленного SSL (Secure Sockets Layer), используемый для аутентификации.

Вот пример рабочего кода:

MailMessage message = new MailMessage();   
message.From = new MailAddress("[email protected]"); 
message.To.Add(new MailAddress("[email protected]")); 
message.Subject = "Subject"; 
message.Body = "Body"; 

try 
{ 
    using (var smtpClient = new SmtpClient("smtp.gmail.com", 587)) 
    { 
     smtpClient.UseDefaultCredentials = false; 
     smtpClient.EnableSsl = true; 

     ServicePointManager.ServerCertificateValidationCallback = 
         delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
         { 
          return true; 
         }; 

     smtpClient.Credentials = new NetworkCredential("[email protected]", "password"); 
     smtpClient.Send(emailMessage); 
    } 
} 
catch (Exception e) 
{ 
     emailMessage = null; 
} 
0

Спасибо! для вашей помощи guyz код был прав, но в моем аккаунте lesssecureapps был отключен, когда я включил его, мой код будет работать в любом случае благодаря вам (Y)

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