一个asp.net
版本的邮件接收程序,我们知道,在asp+中发送Email是见很方便的事情,可是怎么进行收取pop信件的程序呢?看来只有拿出豆腐的杀手剑了:) 首先我们来看看这个程序的代码: pop.aspx
<%@ Assembly Name="System.Net" %> <%@ Import
Namespace="System.Net" %> <% @Import
Namespace="System.Net.Sockets" %> <%@ Import
Namespace="System.IO" %> <script language="C#"
runat=server> protected void Page_Load(Object Src,
EventArgs E){ String
user="doufu";
//邮箱用户代码 String pass="asp888.net";
//邮箱用户密码 String popserver="localhost";
//pop服务器IP地址 TCPClient tcpc = new
TCPClient(); if (0 == tcpc.Connect(popserver,
110)) {
//如果程序执行到这里,就表示连接Pop Server
成功 Stream
s; StreamReader sr
; String
strCmd; Byte[]
arrCmd; String
strRet; String[]
arrRet;
sr = new
StreamReader(tcpc.GetStream(),
Encoding.Default);
Response.Write(sr.ReadLine() + "<br>"); //mail
server 的欢迎语
strRet=Logon(tcpc,user,pass);
if(JudgeString(strRet)!="+OK"){
Response.Write("对不起,没有这个用户/密码
不匹配");
return; }
//用户和密码 匹配,下面开始
统计用户信箱的信息
//这个数组中包括了所有的返回信息
arrRet=StaticMailBox(tcpc);
if(arrRet[0]!="+OK"){
Response.Write("出错了!");
return;
}
Response.Write("当前的用户<font color=blue>" + user +
"</font>的信箱中共有<font color=red>" + arrRet[1] +
"</font>封,共占<font color=red>" + arrRet[2] +
"</font>Byte");
//收信
arrRet=PopMail(tcpc,4);
//判断返回
if(arrRet[0]!="+OK"){
Response.Write("出错了");
} Response.Write("邮件日期:" +
arrRet[1] + "\n<br>");
Response.Write("发信人:" + arrRet[2] +
"\n<br>");
Response.Write("收信人:" + arrRet[3] +
"\n<br>");
Response.Write("邮件主题:" + arrRet[4] +
"\n<br>");
Response.Write("邮件内容:" + arrRet[5] +
"\n<br>");
//关闭Socket联结
tcpc.Close(); }
else {
Response.Write("Could not connect to
server!"); } } String
SendPopCmd(TCPClient tcpc,String
strCmd){ Byte[]
arrCmd; String
strRet; StreamReader
sr; Stream
s;
s=tcpc.GetStream(); strCmd =
strCmd + "\r\n"; arrCmd=
Encoding.Default.GetBytes(strCmd.ToCharArray());
s=tcpc.GetStream();
s.Write(arrCmd, 0,
strCmd.Length); sr = new
StreamReader(tcpc.GetStream(),
Encoding.Default);
strRet=sr.ReadLine(); return
strRet; } String Logon(TCPClient tcpc,String user,String
pass){ //这个函数的功能是 对 获得联结的用户
身份进行验证 //发送
用户代码
String
strRet;
strRet=SendPopCmd(tcpc,"user " +
user);
strRet=SendPopCmd(tcpc,"pass " +
pass); return
strRet; } String[] StaticMailBox(TCPClient
tcpc){ String strRet;
strRet=SendPopCmd(tcpc,"stat");
if(JudgeString(strRet)!="+OK"){
return "-ERR -ERR".Split(" ".ToCharArray());
} String[] arrRet=strRet.Split("
".ToCharArray()); return
arrRet; } String JudgeString(String
strCheck){
if(strCheck.Substring(0,3)!="+OK"){
return "-ERR"; }
else return
"+OK"; } String[] PopMail(TCPClient tcpc,int
i){ String strRet; bool
strBody=false; String[] arrRet =new
String[10]; String[] arrTemp;
strRet=SendPopCmd(tcpc,"retr " +
i.ToString());
if(JudgeString(strRet)!="+OK"){
//表示没有这个信件 或者 其他的错误 return "-ERR
-ERR".Split(" ".ToCharArray());
} StreamReader sr; sr = new
StreamReader(tcpc.GetStream(),
Encoding.Default);
Response.Write("\n<BR>");
Response.Write("<font
color=red>\n<BR>"); while
(sr.Peek()!=46) {
//呵呵,不知道 为什么 非要是 46 才可以!
strRet=sr.ReadLine();
arrTemp=strRet.Split(":".ToCharArray());
if(strRet=="")
strBody=true; //现在开始接收 Body 的信息
if(arrTemp[0]=="Date"){
arrRet[1]=arrTemp[1];
//信件的发送日期
}
if(arrTemp[0]=="From")
arrRet[2]=arrTemp[1]; //发信人
if(arrTemp[0]=="To")
arrRet[3]=arrTemp[1]; //收信人
if(arrTemp[0]=="Subject")
arrRet[4]=arrTemp[1]; //主题
if(strBody){
arrRet[5]=arrRet[5] + strRet +
"\n"; } }
arrRet[0]="+OK"; return
arrRet; } </script> 好了大家通过这个程序,首先可以了解到pop(Post
Ofice Protocal)协议,其次可以加深对asp.net的socket
程序的 理解,还可以通过这个程序接收ISP提供的没有Web方式收取邮件的程序对ISP的信箱进行管理。 |