2013-03-21 15 views
11

Ho cercato di inviare un'e-mail tramite C# da un account Gmail per la registrazione dell'account per il mio sito web.Invio di posta da Gmail SMTP C# Timeout di connessione

Ho provato diversi modi, tuttavia la stessa eccezione continua a comparire: Eccezione System.Net.Mail.Smtp - La connessione è scaduta.

Questo è quello che io inluded nel mio file web.config:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" 
       from="Writely &lt;[email protected]&gt;"> 
      <network host="smtp.gmail.com" 
        port="465" 
        enableSsl="true" 
        defaultCredentials="false" 
        userName="[email protected]" 
        password="******" /> 
     </smtp> 
    </mailSettings> 
</system.net> 

dove Writely è il nome del mio sito web, ed è l'account [email protected] desidero inviare una e-mail da .

Poi, nel mio controller account quando mi collego con il mio database e salvare l'utente nel mio tavolo, sto creando il mio oggetto MailMessage e il tentativo di stesso la posta da:

using (DBConnection conn = new DBConnection()) 
{ 
     conn.UserInfoes.Add(userInfo); 
     conn.SaveChanges(); 

     MailMessage mail = new MailMessage(); 
     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 
     mail.Subject = "Welcome to Writely"; 
     mail.Body = "Test content"; 

     SmtpClient smtp = new SmtpClient(); 
     smtp.Send(mail); 
} 

Mi manca qualcosa o fare Qualcosa non va? Ho letto che questo è il modo migliore per farlo in un'altra domanda sullo stack overflow, quindi non so davvero quale sia il problema qui.

Grazie per il vostro aiuto :)

risposta

8

È necessario dire al SmtpClient quali impostazioni da utilizzare. Non legge automaticamente queste informazioni dal file Web.Config.

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 465); 
smtp.Credentials = new NetworkCredential("[email protected]", "***"); 
smtp.EnableSsl = true; 
smtp.Send(mail); 
+0

Non è questa la linea dove ho specificare il nome host del server? host di rete = "smtp.gmail.com" in web.config? – Bernice

+0

@Bernice Mi dispiace, fammi riformulare. Le informazioni in Web.Config non vengono automaticamente utilizzate dalla classe SmtpClient. Vedi il codice nella mia risposta aggiornata. –

+0

oh ok grazie :) .. e google usa la porta 587 o 465? perché sto vedendo diversi numeri di porta in ogni domanda su Internet. Devo cambiare anche la porta in web.config in 587? – Bernice

5

gmail richiede l'autenticazione:

Outgoing Mail (SMTP) Server 
requires TLS or SSL: smtp.gmail.com (use authentication) 
Use Authentication: Yes 
Port for TLS/STARTTLS: 587 
Port for SSL: 465 

così quello che ho fatto è

var client = new SmtpClient("smtp.gmail.com", 587) 
     { 
      Credentials = new NetworkCredential("[email protected]", "mypwd"), 
      EnableSsl = true 
     }; 
     client.Send("[email protected]", "[email protected]", "Welcome to Writely", "Test content"); 
3

ho avuto lo stesso identico problema e sta risolto dopo il passaggio il numero di porta da 465 a 587.

Ho avuto il problema su "email di conferma", "recupero password" e "invio di email" e ora tutto 3 problemi sono risolti :).

So che è un post piuttosto vecchio, ma di solito uso i post esistenti per trovare risposte invece di chiedere nuove domande.

Grazie a tutti per il vostro aiuto.

1

Come ho già risposto here.

Questo problema può anche essere causato da una configurazione di sicurezza nel tuo account Gmail.

La porta corretta è 587, ma per l'autenticazione è necessario consentire l'accesso da app meno sicure nel proprio account gmail. Provalo here

Ha funzionato per me, spero che aiuta ..

0

Esempio in forme asp.net web/SharePoint

StringBuilder Body = new StringBuilder(); 
Body.Append("Your text"); 

String FromEmail = "you email"; 
String DisplayNameFromEmailMedico = "display when you receive email"; 
MailMessage message = new MailMessage(); 
message.From = new MailAddress(FromEmail, DisplayNameFromEmailMedico); 
message.To.Add(new MailAddress("[email protected]")); 
message.Subject = "subject that print in email"; 
message.IsBodyHtml = true; 
message.Body = Body.ToString(); 
SmtpClient client = new SmtpClient(); 

NetworkCredential myCreds = new NetworkCredential("[email protected]", "key from email smtp", ""); 
client.EnableSsl = true; 
client.Credentials = myCreds; 
client.Send(message); 
Problemi correlati