一個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的信箱進行管理。
|