.net Framework中并不包含收郵件的功能,解决方法是使用第三方的COM组件。我推荐Jmail.
解决方案 »
- RSA C#:已知公钥、被签名字符串原文(明文)、密文,要求验证密文是否合法,求C#实现方法
- .net程序集如何向COM公开
- 怎么样对多个EXCEL表读取到一个DATASET中。。。。
- 安装.net出错了!
- 求助:关于web上的DATAGRID的更新问题
- C#如何获取Word打印完成信息?
- Remoting问题:怎样停止用RegisterWellKnownServiceType方法注册的类型?(具体情况入内)
- 大神们,一个关于按钮键的问题,请指教!
- install shield打包工具,需要学习脚本语言吗?
- 哪们大侠用过mutex类,或有没有人过mutex类同步进程?
- 当在datagrid中双击某一行时,如何将该行的值传入一个文本框中!
- 入门级问题:显示一个文件夹选择对话框,从中选择文件夹.100分
您可以基于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))。
{
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";
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
}}