2010-10-11 4 views
1

Voici mon code:.NET Pourquoi ne puis-je pas envoyer d'e-mail?

try 
{ 
    MailMessage m = new MailMessage 
     ("[email protected]", 
     "[email protected]", 
     "Quarterly data report.", 
     "Hello, world."); 

    SmtpClient client = new SmtpClient("smtp.gmail.com", 465); 
    client.Credentials = new NetworkCredential("[email protected]", "password"); 
    client.EnableSsl = true; 
    client.Send(m); 
    Console.WriteLine("sent"); 
} 
catch (InvalidOperationException ey) 
{ 
    Console.WriteLine(ey.Message); 
} 
catch (SmtpFailedRecipientException sm) 
{ 
    Console.WriteLine(sm.Message); 
} 
catch (SmtpException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

Ce code génère cette erreur à SmtpException: "Échec l'envoi du courrier." Le complet est exception est la suivante:

ex.ToString() "System.Net.Mail.SmtpException: Failure sending mail. 
    ---> System.Net.WebException: Unable to connect to the remote server 
    ---> System.Net.Sockets.SocketException: A connection attempt failed because 
    the connected party did not properly respond after a period of time, or 
    established connection failed because connected host has failed to respond 
    74.125.67.109:587 
    at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 
    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) 
    --- End of inner exception stack trace --- 
    at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6, Int32 timeout) 
    at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsyncDelegate asyncCallback) 
    at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)\r\n at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout) 
    at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) 
    at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) 
    at System.Net.Mail.SmtpClient.GetConnection() 
    at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    --- End of inner exception stack trace --- 
    at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    at ConsoleApplication3.Program.Main(String[] args) in c:\\users\\alan\\documents\\visual studio 2010\\Projects\\ConsoleApplication3\\ConsoleApplication3\\Program.cs:line 24" string 
+4

Encaisser quelques réponses sur vos questions, ou les gens seront moins enclins à vous aider. –

+0

Votre pare-feu et le pare-feu sur le périmètre de votre réseau sont-ils ouverts sur les ports appropriés? –

+0

Je ne peux pas, j'ai besoin de réputation pour le faire – Alan

Répondre

0

Essayez d'envoyer un simple e-mail en utilisant cet extrait:

var smtpClient = new SmtpClient("smtp.gmail.com", 587) 
{ 
    Credentials = new NetworkCredential(
     "[email protected]", 
     "yourpassword" 
    ), 
    EnableSsl = true 
}; 
smtpClient.Send("[email protected]", "[email protected]", "subject", "body"); 

Les différences de votre code est le port 587 (au lieu de votre 465).

+0

J'ai testé, mais il renvoie la même erreur. Merci quand même – Alan

0

Il semble que votre script ne puisse pas contacter le serveur Gmail sur le port spécifié. Assurez-vous que votre serveur peut atteindre cette adresse/ce port en lui téléphonant et en vérifiant si vous avez reçu une réponse.

0

Une situation très similaire m'est arrivée il y a quelque temps. J'ai suivi les modèles que j'avais trouvés en ligne pour utiliser SmtpClient dans System.Net. Après avoir fait des recherches, j'ai découvert que mon FAI avait mis en place des politiques pour abandonner le trafic de courrier sur certains ports parce qu'ils voulaient que les gens acheminent le trafic via leurs propres serveurs de courrier (combattre le spam). Ma situation a été compliquée par le fait que le port que j'avais besoin d'utiliser (pour mon compte ymail professionnel) a été bloqué par mon fournisseur d'accès Internet. Il s'avère que les seuls serveurs de courrier électronique auxquels je pouvais me connecter étaient gmail. Vous pouvez donc essayer d'utiliser différents fournisseurs de messagerie ou de parler à votre FAI des stratégies de suppression et de blocage du courrier et de la manière dont certains ports sont traités.

Voilà ce qui a fonctionné pour moi:

private bool sendEmailAlert(string emailAddress, string subject, string message) 
     { 
      try 
      { 
       //Construct e-mail message: 
       string fromAddress = "[email protected]", 
         fromName = "Your Biz";//"Don't Reply"; 
       MailMessage email_msg = new MailMessage(); 
       email_msg.From = new MailAddress(fromAddress, fromName); 
       email_msg.Sender = new MailAddress(fromAddress, fromName); 
       email_msg.To.Add(emailAddress); 
       email_msg.Subject = subject; 
       email_msg.Body = message; 
       SmtpClient mail_client = new SmtpClient(); 
       NetworkCredential network_cdr = new NetworkCredential(); 
       network_cdr.UserName = "[email protected]"; 
       network_cdr.Password = "password"; 
       mail_client.Credentials = network_cdr; 
       mail_client.Port = 587; 
       mail_client.Host = "smtp.gmail.com"; 
       mail_client.EnableSsl = true; 

       //Send e-mail message; 
       mail_client.Send(email_msg); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       StreamWriter errorFile = new StreamWriter("errorLog.txt", true); 
       errorFile.WriteLine(DateTime.Now.ToString() + ": sendEmailAlert exception: " + ex.ToString()); 
       errorFile.Close(); 
       return false; 
      } 
     } 
+0

mec, votre code est égal à mon code: U – Alan

+0

Le port est différent ... posté sans rafraîchir donc je n'ai pas vu le gars recommande de changer de port. Les conseils sur l'exploration de la façon dont les FAI gâchent le trafic «suspect» ou «spam» persistent. Aussi, vous pourriez vouloir vous assurer que vous n'êtes pas une adresse IP sur liste noire. Jetez un coup d'œil à spamhaus.org et voyez si votre adresse IP se trouve sur une liste de blocage de politique. Si c'est le cas, vous pouvez supprimer et retester. Un grand nombre de fournisseurs de services Internet restreignent le trafic de courrier provenant d'hôtes figurant sur les listes de blocage de spamhaus. – kmarks2

+0

ok, merci, mais ce n'est pas le cas. – Alan

Questions connexes