Envoyer des commandes IMAP à GMail en utilisant C #

J’ai essayé d’accéder à mon compte GMail pour récupérer les courriels non lus de mon compte de messagerie. Cependant, je ne peux que me connecter … Après, cela ne fonctionne pas.

Tout d’abord, je me connecte au serveur, puis envoie la commande de connexion et enfin la commande examiner. Le fait est que les réponses reçues se réfèrent uniquement à la connexion et à la connexion. Après cela, il ne rest plus qu’à attendre que quelque chose soit lu dans StreamReader.

try { // create an instance of TcpClient TcpClient tcpclient = new TcpClient(); // HOST NAME POP SERVER and gmail uses port number 995 for POP //tcpclient.Connect("pop.gmail.com", 995); tcpclient.Connect("imap.gmail.com", 993); // This is Secure Stream // opened the connection between client and POP Server SslStream sslstream = new SslStream(tcpclient.GetStream()); // authenticate as client sslstream.AuthenticateAsClient("imap.gmail.com"); bool flag = sslstream.IsAuthenticated; // check flag // Asssigned the writer to stream System.IO.StreamWriter sw = new StreamWriter(sslstream); // Assigned reader to stream System.IO.StreamReader reader = new StreamReader(sslstream); sw.WriteLine("tag LOGIN user@gmail.com pass"); sw.Flush(); sw.WriteLine("tag2 EXAMINE inbox"); sw.Flush(); sw.WriteLine("tag3 LOGOUT "); sw.Flush(); ssortingng str = ssortingng.Empty; ssortingng strTemp = ssortingng.Empty; try { while ((strTemp = reader.ReadLine()) != null) { Console.WriteLine(strTemp); // find the . character in line if (strTemp == ".") { //reader.Close(); break; } if (strTemp.IndexOf("-ERR") != -1) { //reader.Close(); break; } str += strTemp; } } catch (Exception ex) { ssortingng s = ex.Message; } //reader.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } 

Vous pourriez plutôt utiliser une bibliothèque IMAP / SSL en conserve – il y en a une qui est toujours active ici .

Cette alternative n’est pas gratuite.

Le code source de l’un d’eux est utile, car vous souhaitez lancer votre propre gestionnaire de protocole.

Je cherchais ce type d’exemple “Hello World” pour bien commencer. À l’aide des réponses de dkarp, voici mon sharepoint vue sur l’exemple de Miguel:

  static void Main( ssortingng[] args ) { try { TcpClient tcpclient = new TcpClient(); tcpclient.Connect( "imap.gmail.com", 993 ); SslStream sslstream = new SslStream( tcpclient.GetStream() ); sslstream.AuthenticateAsClient( "imap.gmail.com" ); if ( sslstream.IsAuthenticated ) { StreamWriter sw = new StreamWriter( sslstream ); StreamReader sr = new StreamReader( sslstream ); sw.WriteLine( "tag LOGIN user@gmail.com pass" ); sw.Flush(); ReadResponse( "tag", sr ); sw.WriteLine( "tag2 EXAMINE inbox" ); sw.Flush(); ReadResponse( "tag2", sr ); sw.WriteLine( "tag3 LOGOUT" ); sw.Flush(); ReadResponse( "tag3", sr ); } } catch ( Exception ex ) { Console.WriteLine( ex.Message ); } } private static void ReadResponse( ssortingng tag, StreamReader sr ) { ssortingng response; while ( ( response = sr.ReadLine() ) != null ) { Console.WriteLine( response ); if ( response.StartsWith( tag, SsortingngComparison.Ordinal ) ) { break; } } } 

Votre problème est que vous attendez des réponses POP d’un serveur IMAP. POP termine les messages récupérés avec . et répond aux autres commandes avec une ligne commençant par +OK ou -ERR . IMAP pas. Vous utilisez toutes les réponses du serveur, puis vous vous bloquez et attendez que quelque chose corresponde à votre parsingur de réponse de type POP. Si vous examinez les données renvoyées, vous devriez voir le rest des réponses du serveur à vos demandes (correctement formatées).

Il est possible que le serveur n’envoie pas les réponses à vos deuxième et troisième commandes. Cela peut être dû au fait que vous essayez de gérer trois requêtes en pipeline; c’est-à-dire que vous envoyez les demandes sans attendre les réponses. Le serveur est obligé d’autoriser le traitement en pipeline lorsqu’il est dans l’état SELECTED , mais le protocole ne garantit pas que vous pouvez utiliser des commandes en pipeline à partir de l’état NOT AUTHENTICATED .