2009-11-12 6 views
0

Possible en double:
Recommendations for a .NET component to access an email inboxpour aller chercher la boîte de réception de courrier électronique dans VB.NET

Je suis en train de développer une application pour analyser les messages électroniques. J'ai écrit ce programme en PHP. Cela fonctionne maintenant. Mais le problème est que je ne peux pas compléter mon exigence. Maintenant j'essaye de faire ceci dans VB.NET ou n'importe quel type de langage qui est soutenu par Visual Studio. Mon besoin actuel est d'aller chercher l'email et le lien contenu dans l'email.

Si possible, exemple de code serait apprécié.

+1

S'il vous plaît être plus clair sur ce que vous voulez. Votre code php de travail serait un bon début. – bguiz

Répondre

1

Vous pouvez commencer par regarder http://www.codeproject.com/KB/IP/despop3client.aspx. Si vous avez besoin SSL (pour Gmail par exemple) - alors voici un exemple pour vous. Je l'ai écrit il y a quelque temps, et il est basé sur un code j'ai trouvé sur Internet. (Désolée, je ne me souviens plus où - donc pas d'attribution)

public class Pop3EMail 
{ 
    public long Number { get; set; } 
    public long Bytes { get; set; } 
    public bool Retrieved { get; set; } 
    public string Body { get; set; } 
} 
public class SecurePop3Client : TcpClient, IDisposable 
{ 
    SslStream netStream; 
    static ILog log = LogManager.GetLogger(typeof(SecurePop3Client)); 

    private SecurePop3Client() 
    { } 

    private void EstablishConnection(string serverAddress, int port, string sertificateName, string username, string password) 
    { 

     try 
     { 
      Connect(serverAddress, port); 

      netStream = new SslStream(GetStream()); 

      netStream.AuthenticateAsClient(sertificateName); 

      CheckResponse(GetServerResponse()); 
      CheckResponse(SendToServer(string.Format("USER {0}\r\n", username))); 
      CheckResponse(SendToServer(string.Format("PASS {0}\r\n", password))); 
      log.DebugFormat("Connected to {0}:{1}, with serificate :{2}", serverAddress, port, sertificateName); 
     } 
     catch (Exception e) 
     { 
      throw new SecurePop3Exception("Connecting to Email server failed", e); 
     } 
    } 

    public void Disconnect() 
    { 
     CheckResponse(SendToServer("QUIT\r\n")); 
     log.Debug("Disconnected from server"); 
    } 


    public List<Pop3EMail> List() 
    { 
     string response; 
     var ret = new List<Pop3EMail>(); 
     CheckResponse(SendToServer("LIST\r\n")); 
     while (true) 
     { 
      response = GetServerResponse(); 
      if (response == ".\r\n") 
      { 
       log.DebugFormat("Retrieved {0} messages from the server", ret.Count); 
       return ret; 
      } 
      else 
      { 
       try 
       { 
        string[] values = response.Split(new char[] { ' ' }); 
        Pop3EMail mail = new Pop3EMail 
        { 
         Number = Int32.Parse(values[0]), 
         Bytes = Int32.Parse(values[1]), 
         Retrieved = false 
        }; 
        ret.Add(mail); 
       } 
       // catch (ArgumentNullException) 
       // catch (FormatException) 
       // catch (OverflowException) 
       // catch (IndexOutOfRangeException) 
       catch (Exception e) 
       { 
        throw new SecurePop3Exception("Parsing message list failed", e); 
       } 
      } 
     } 
    } 

    public void RetrieveBody(Pop3EMail mail) 
    { 
     string response; 

     CheckResponse(SendToServer(string.Format("RETR {0}\r\n", mail.Number))); 

     StringBuilder body = new StringBuilder(); 
     while (true) 
     { 
      response = GetServerResponse(); 
      if (response == ".\r\n") 
      { 
       break; 
      } 
      else 
      { 
       body.Append(response); 
      } 
     } 
     mail.Retrieved = true; 
     mail.Body = body.ToString(); 
     log.DebugFormat("Retrieved body of mail {0}", mail.Number); 
    } 


    public void Delete(Pop3EMail mail) 
    { 
     CheckResponse(SendToServer(string.Format("DELE {0}\r\n", mail.Number))); 
     log.DebugFormat("Deleted Email {0}", mail.Number); 
    } 

    private string GetServerResponse() 
    { 
     byte[] buffer = new Byte[1024]; 
     int count = 0; 
     while (true) 
     { 
      byte[] buff = new Byte[2]; 
      int bytes = netStream.Read(buff, 0, 1); 
      if (bytes == 1) 
      { 
       buffer[count] = buff[0]; 
       count++; 

       if (buff[0] == '\n') 
       { 
        break; 
       } 
      } 
      else 
      { 
       break; 
      }; 
     }; 

     string retval = Encoding.ASCII.GetString(buffer, 0, count); 
     log.DebugFormat("GOT FROM SERVER: {0}",retval); 
     return retval; 
    } 


    private string SendToServer(string message) 
    { 
     try 
     { 
      byte[] buffer = new byte[1024]; 
      buffer = Encoding.ASCII.GetBytes(message); 

      netStream.Write(buffer, 0, buffer.Length); 
      log.DebugFormat("SEND TO SERVER: {0}", message); 
      return GetServerResponse(); 
     } 
     catch (Exception e) 
     { 
      throw new SecurePop3Exception(string.Format("Communication with server failed"), e); 
     } 
    } 

    private void CheckResponse(string response) 
    { 
     if (string.IsNullOrEmpty(response) || response.Length < 3 || string.Compare(response.Substring(0, 3),"+OK",true) != 0) 
     { 
      throw new SecurePop3Exception(response); 
     } 
    } 




    /// <summary> 
    /// Factory 
    /// </summary> 
    /// <param name="serverAddress"></param> 
    /// <param name="port"></param> 
    /// <param name="sertificateName"></param> 
    /// <returns></returns> 
    public static SecurePop3Client Connect(string serverAddress, int port, string sertificateName, string username, string password) 
    { 
     SecurePop3Client client = new SecurePop3Client(); 
     client.EstablishConnection(serverAddress, port, sertificateName, username, password); 
     return client; 
    } 



    #region Dispose Design Pattern Implementation 
    /// <summary> 
    /// Dispose 
    /// </summary> 
    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    /// <summary> 
    /// Disposes the instance. 
    /// </summary> 
    /// <param name="disposing">if set to <c>true</c> [disposing].</param> 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      Disconnect(); 
      netStream.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 

    // Use C# destructor syntax for finalization code. 
    ~SecurePop3Client() 
    { 
     // Simply call Dispose(false). 
     Dispose(false); 
    } 
    #endregion 

} 
+0

Thaks monsieur pour cet excellent. Je vais essayer avec ça ... – saif

Questions connexes