2013-07-04 3 views
27

Jestem spróbować wysyłania poczty za pomocą Gmaila, a ja otrzymuję wyjątek, który jest The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. i16sm1806350pag.18 - gsmtpOdpowiedź serwera: 5.7.0 Musi najpierw wydać komendę STARTTLS. i16sm1806350pag.18 - gsmtp

kod Pisałem do wysyłania poczty jest

  MailMessage mail = new MailMessage(); 
      mail.To.Add(txtEmail.Text.Trim()); 
      mail.To.Add("[email protected]"); 
      mail.From = new MailAddress("[email protected]"); 
      mail.Subject = "Confirmation of Registration on Job Junction."; 
      string Body = "Hi, this mail is to test sending mail using Gmail in ASP.NET"; 
      mail.Body = Body; 
      mail.IsBodyHtml = true; 
      SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); 
      // smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address 
      smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "password"); 
      // smtp.Port = 587; 
      //Or your Smtp Email ID and Password 
      smtp.UseDefaultCredentials = false; 
      // smtp.EnableSsl = true; 
      smtp.Send(mail); 

Proszę mi powiedzieć rozwiązania Jestem nie otrzymuję żadnych rozwiązań dla tych wyjątków.

+0

Witaj @Ankur, Jeśli znajdziesz rozwiązanie swojego problemu, pomóż mi, ponieważ dostaję ten sam błąd. – Abhishek

+0

@Abhishek pojawił się problem SmtpClient, dodałem smtp do web.confg i jego odpowiedź została rozwiązana jak w odpowiedziach. –

Odpowiedz

28

Gmail wymaga bezpiecznego połączenia. To może być ustawiony w pliku web.config tak:

<network host="smtp.gmail.com" enableSsl="true" ... /> 

LUB

SSL należy włączyć na serwerze internetowym, jak również. Patrz poniższy link

Enabling SSL on IIS 7.0

2

logika przycisk Wyślij

 string fromaddr = "[email protected]"; 
     string toaddr = TextBox1.Text;//TO ADDRESS HERE 
     string password = "YOUR PASSWROD"; 


     MailMessage msg = new MailMessage(); 
     msg.Subject = "Username &password"; 
     msg.From = new MailAddress(fromaddr); 
     msg.Body = "Message BODY"; 
     msg.To.Add(new MailAddress(TextBox1.Text)); 
     SmtpClient smtp = new SmtpClient(); 
     smtp.Host = "smtp.gmail.com"; 
     smtp.Port = 587; 
     smtp.UseDefaultCredentials = false; 
     smtp.EnableSsl = true; 
     NetworkCredential nc = new NetworkCredential(fromaddr,password); 
     smtp.Credentials = nc; 
     smtp.Send(msg); 

-> ten kod praca 100% Jeśli masz anty wirus w systemie, że oprogramowanie antywirusowe firewall Ogranicz wysyłanie maili od naszych system tak wyłącza twój antywirus i system firewall. Po tym okresie kod .... W powyższym kontroli kodu TextBox1.Text stosuje TOaddress

+0

Przykro mi być naiwnością, ale w jaki sposób wyłączenie firewalla może zrobić cokolwiek? Na pewno, kiedy będzie to hostowanie, zapora programistów nic nie zmieni? Wtedy każdy użytkownik musiałby mieć zaporę ogniową? – user2903379

14

etapie (1):smtp.EnableSsl = true;

jeśli nie wystarcza:

Etap (2) :Dostęp dla mniej bezpiecznych aplikacji” musi być włączona dla konta Gmail używanym przez NetworkCredential wykorzystaniem google's settings page:

5

Ten problem prześladował mnie również w nocy. Oto jak to naprawić:

  • Set gospodarzem: smtp.gmail.com
  • Ustaw port: 587

Jest to TLS Port. Używałem wszystkich innych portów SMTP bez powodzenia. Jeśli ustawisz enableSsl = true takiego:

Dim SMTP As New SmtpClient(HOST) 
SMTP.EnableSsl = True 

Przycinanie nazwy użytkownika i hasła pola (dobry sposób, aby uniknąć błędów, jeśli użytkownik wprowadza e-mail i hasło przy rejestracji jak kopalnia robi) tak:

SMTP.Credentials = New System.Net.NetworkCredential(EmailFrom.Trim(), EmailFromPassword.Trim()) 

Używanie Port TLS traktuje Twój SMTP jako SMTPS, umożliwiając uwierzytelnienie. Natychmiast otrzymałem ostrzeżenie od Google, że mój e-mail blokuje aplikację, która ma zagrożenia bezpieczeństwa lub jest nieaktualna. Przystąpiłem do "Włącz mniej bezpieczne aplikacje". Następnie zaktualizowałem informacje o moim numerze telefonu, a Google przesłał mi kod weryfikacyjny za pośrednictwem SMS-a. Wszedłem i voila!

Uruchomiłem aplikację ponownie i zakończyło się sukcesem. Wiem, że ten wątek jest stary, ale wyczyściłem net, odczytując wszystkie wyjątki, które rzucił i dodając MsgBoxes po każdym wierszu, aby zobaczyć, co poszło nie tak. Oto mój kod roboczych zmodyfikowany dla czytelności jak wszystkich moich zmiennych pochodzą z bazy danych MySQL:

Try 
    Dim MySubject As String = "Email Subject Line" 
    Dim MyMessageBody As String = "This is the email body." 
    Dim RecipientEmail As String = "[email protected]" 
    Dim SenderEmail As String = "[email protected]" 
    Dim SenderDisplayName As String = "FirstName LastName" 
    Dim SenderEmailPassword As String = "SenderPassword4Gmail" 

    Dim HOST = "smtp.gmail.com" 
    Dim PORT = "587" 'TLS Port 

    Dim mail As New MailMessage 
    mail.Subject = MySubject 
    mail.Body = MyMessageBody 
    mail.To.Add(RecipientEmail) 
    mail.From = New MailAddress(SenderEmail, SenderDisplayName) 

    Dim SMTP As New SmtpClient(HOST) 
    SMTP.EnableSsl = True 
    SMTP.Credentials = New System.Net.NetworkCredential(SenderEmail.Trim(), SenderEmailPassword.Trim()) 
    SMTP.DeliveryMethod = SmtpDeliveryMethod.Network 
    SMTP.Port = PORT 
    SMTP.Send(mail) 
    MsgBox("Sent Message To : " & RecipientEmail, MsgBoxStyle.Information, "Sent!") 
Catch ex As Exception 
    MsgBox(ex.ToString) 
End Try 

Mam nadzieję, że ten kod pomaga PO, ale także ktoś jak ja przybyciu na imprezę późno. Cieszyć się.

0

Jeśli przechodząc (jak ja) wszystkich parametrów, takich jak portu, nazwę użytkownika, hasło poprzez system i nie pozwolić, aby zmodyfikować kod, a następnie można zrobić, że ta prosta zmiana w pliku web.config:

<system.net> 
    <mailSettings> 
     <smtp> 
     <network enableSsl="true"/> 
     </smtp> 
    </mailSettings> 
    </system.net>