.net Framework中并不包含收郵件的功能,解决方法是使用第三方的COM组件。我推荐Jmail.

解决方案 »

  1.   

    感谢您使用微软产品。
     
    您可以基于RFC 1725协议来编写从pop服务器上收邮件的C#程序。
    下面这段代码描述了连接到pop服务器的大致步骤,因为篇幅缘故,略去了出错处理等代码。
    public TcpClient Server;
    public NetworkStream NetStrm;
    public StreamReader  RdStrm;
    public string Data;
    public byte[] szData;
    public string CRLF = "\r\n";
    public string Result;// create server POP3 with port 110
    Server = new TcpClient(SeverName,110);// initialization
    NetStrm = Server.GetStream();
    RdStrm= new StreamReader(Server.GetStream());
    Result = RdStrm.ReadLine();// Login Process
    Data = "USER "+ UserName+CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData,0,szData.Length);
    Result = RdStrm.ReadLine();Data = "PASS "+ Password+CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData,0,szData.Length);
    Result = RdStrm.ReadLine();// Send STAT command to get information ie: number of mail and size
    Data = "STAT"+CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData,0,szData.Length);
    Result = RdStrm.ReadLine();下面这段代码描述了检索第N封邮件的大致步骤。
    string mailtext;
    Data = "RETR "+ N +CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData,0,szData.Length); Result = RdStrm.ReadLine();
    if(Result [0]!='-') 
    {
        while(Result!=".")
        {
    mailtext += Result +CRLF;
    Result = RdStrm.ReadLine();
        }
    }- 微软全球技术中心 VC技术支持
     
    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
      

  2.   

    namespace POP3Client
    {
    using System.IO ;
    using System.Net;
    using System.Net.Sockets ;
    //Please note that all code is copyright 2002 by William J Dean
    public class POP3client
    {
    public enum connect_state {disc,AUTHORIZATION,TRANSACTION,UPDATE}; public string user;
    public string pwd;
    public string pop;
    public bool error;
    public connect_state state=connect_state.disc ; //borrowed from Agus Kurniawan's article:"Retrieve Mail From a POP3 Server Using C#"  at http://www.codeproject.com/csharp/popapp.asp 
    private TcpClient Server;
    private NetworkStream NetStrm;
    private StreamReader  RdStrm;
    private string Data;
    private byte[] szData;
    private string CRLF = "\r\n"; public POP3client()
    {
    //nothing to do..just create to object
    } public POP3client(string pop_server,string user_name,string password)
    {
    //put the specied server (pop_server), user (user_name) and password (password)
    //into the appropriate properties.
    pop=pop_server;
    user=user_name;
    pwd=password;
    } #region Utility Methods, some public, some private
    public string connect (string pop_server)
    {
    pop=pop_server;    //put the specified server into the pop property
    return(connect()); //call the connect method
    }
    public string connect()
    {
    //Initialize to the pop server.  This code snipped "borrowed"
    //with some modifications...
    //from the article "Retrieve Mail From a POP3 Server Using C#" at
    //www.codeproject.com by Agus Kurniawan
    //http://www.codeproject.com/csharp/popapp.asp // create server with port 110
    Server = new TcpClient(pop,110);

    try
    {
    // initialization
    NetStrm = Server.GetStream();
    RdStrm= new StreamReader(Server.GetStream()); //The pop session is now in the AUTHORIZATION state
    state=connect_state.AUTHORIZATION ;
    return(RdStrm.ReadLine ());
    }
    catch(InvalidOperationException err)
    {
    return("Error: "+err.ToString());
    } }
    private string disconnect ()
    {
    string temp="disconnected successfully.";
    if(state !=connect_state.disc)
    { //close connection
    NetStrm.Close();
    RdStrm.Close();
    state=connect_state.disc ;
    }
    else
    {
    temp="Not Connected.";
    }
    return(temp);
    } private void issue_command(string command)
    {
    //send the command to the pop server.  This code snipped "borrowed"
    //with some modifications...
    //from the article "Retrieve Mail From a POP3 Server Using C#" at
    //www.codeproject.com by Agus Kurniawan
    //http://www.codeproject.com/csharp/popapp.asp
    Data= command + CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData,0,szData.Length); }
    private string read_single_line_response()
    {
    //read the response of the pop server.  This code snipped "borrowed"
    //with some modifications...
    //from the article "Retrieve Mail From a POP3 Server Using C#" at
    //www.codeproject.com by Agus Kurniawan
    //http://www.codeproject.com/csharp/popapp.asp
    string temp;
    try
    {
    temp = RdStrm.ReadLine();
    was_pop_error(temp);
    return(temp);
    }
    catch(InvalidOperationException err)
    {
    return("Error in read_single_line_response(): " + err.ToString ()) ;
    } }
    private string read_multi_line_response()
    {
    //read the response of the pop server.  This code snipped "borrowed"
    //with some modifications...
    //from the article "Retrieve Mail From a POP3 Server Using C#" at
    //www.codeproject.com by Agus Kurniawan
    //http://www.codeproject.com/csharp/popapp.asp
    string temp="";
    string szTemp; try
    {
    szTemp = RdStrm.ReadLine();
    was_pop_error(szTemp);
    if(!error) 
    {

    while(szTemp!=".")
    {
    temp += szTemp+CRLF;
    szTemp = RdStrm.ReadLine();
    }
    }
    else
    {
    temp=szTemp;
    }
    return(temp);
    }
    catch(InvalidOperationException err)
    {
    return("Error in read_multi_line_response(): " + err.ToString ());
    }
    }
    private void was_pop_error(string response)
    {
    //detect if the pop server that issued the response believes that
    //an error has occured. if(response.StartsWith ("-"))
    {
    //if the first character of the response is "-" then the 
    //pop server has encountered an error executing the last 
    //command send by the client
    error=true;
    }
    else
    {
    //success
    error=false;
    }
    }
    #endregion
    #region POP commands
    public string DELE(int msg_number)
    {
    string temp;

    if (state != connect_state.TRANSACTION )
    {
    //DELE is only valid when the pop session is in the TRANSACTION STATE
    temp="Connection state not = TRANSACTION";
    }
    else
    {
    issue_command("DELE " + msg_number.ToString ());
    temp=read_single_line_response();
    }
    return(temp);
    } public string LIST()
    {
    string temp="";
    if (state != connect_state.TRANSACTION )
    {
    //the pop command LIST is only valid in the TRANSACTION state
    temp="Connection state not = TRANSACTION";
    }
    else
    {
    issue_command ("LIST");
    temp=read_multi_line_response();
    }
    return(temp);
    } public string LIST(int msg_number)
    {
    string temp=""; if (state != connect_state.TRANSACTION )
    {
    //the pop command LIST is only valid in the TRANSACTION state
    temp="Connection state not = TRANSACTION";
    }
    else
    {
    issue_command ("LIST " + msg_number.ToString ());
    temp=read_single_line_response();  //when the message number is supplied, expect a single line response
    }
    return(temp); } public string NOOP()
    {
    string temp;
    if (state != connect_state.TRANSACTION )
    {
    //the pop command NOOP is only valid in the TRANSACTION state
    temp="Connection state not = TRANSACTION";
    }
    else
    {
    issue_command ("NOOP");
    temp=read_single_line_response(); }
    return(temp); }
    public string PASS()
    {
    string temp;
    if (state != connect_state.AUTHORIZATION) 
    {
    //the pop command PASS is only valid in the AUTHORIZATION state
    temp="Connection state not = AUTHORIZATION";
    }
    else
    {
    if (pwd !=null)
    {
    issue_command ("PASS " + pwd);
    temp=read_single_line_response(); if (!error)
    {
    //transition to the Transaction state
    state=connect_state.TRANSACTION;
    }
    }
    else
    {
    temp="No Password set.";
    }
    }
    return(temp);
    }
    public string PASS(string password)
    {
    pwd=password;   //put the supplied password into the appropriate property
    return(PASS()); //call PASS() with no arguement
    } public string QUIT()
    {
    //QUIT is valid in all pop states string temp;
    if (state !=connect_state.disc)
    {
    issue_command ("QUIT");
    temp=read_single_line_response();
    temp += CRLF + disconnect();

    }
    else
    {
    temp="Not Connected.";
    }
    return(temp); }
    public string RETR (int msg)
    {
    string temp="";
    if (state != connect_state.TRANSACTION )
    {
    //the pop command RETR is only valid in the TRANSACTION state
    temp="Connection state not = TRANSACTION";
      

  3.   

    }
    else
    {
    // retrieve mail with number mail parameter
    issue_command ("RETR "+ msg.ToString ());
    temp=read_multi_line_response();
    }
    return(temp); } public string RSET()
    {
    string temp;
    if (state != connect_state.TRANSACTION )
    {
    //the pop command STAT is only valid in the TRANSACTION state
    temp="Connection state not = TRANSACTION";
    }
    else
    {
    issue_command("RSET");
    temp=read_single_line_response();
    }
    return(temp); } public string STAT()
    {
    string temp;
    if (state==connect_state.TRANSACTION)
    {
    issue_command("STAT");
    temp=read_single_line_response(); return(temp);
    }
    else {
    //the pop command STAT is only valid in the TRANSACTION state
    return ("Connection state not = TRANSACTION");
    }
    } public string USER()
    {
    string temp;
    if (state != connect_state.AUTHORIZATION) 
    {
    //the pop command USER is only valid in the AUTHORIZATION state
    temp="Connection state not = AUTHORIZATION";
    }
    else
    {
    if (user !=null)
    {   
    issue_command("USER "+ user);
    temp=read_single_line_response();
    }
    else
    {   //no user has been specified
    temp="No User specified.";
    }
    }
    return(temp);
    } public string USER(string user_name)
    {
    user=user_name;  //put the user name in the appropriate propertity
    return(USER());  //call USER with no arguements
    }
    #endregion
    }}