asp.net實現pop功能
2024-07-10 12:57:57
供稿:網友
/*
豆腐制作 都是精品
http://www.asp888.net 豆腐技術站
如轉載 請保留完整版權信息
*/
前面我曾經講過如何在asp.net下利用socket編程實現域名查詢,詳細情況請看文章:[url]http://www.asp888.net/lanmu/viewarticle.asp?id=51[title]asp+中實現域名查詢的完整代碼[/title][/url]
豆腐有一天突然想,既然可以利用socket實現域名查詢,那是不是只要是利用到socket客戶端
編程的以前的 windows 桌面程序都可以用asp.net 實現呢?說干就干,我第一個準備要做的就是
一個asp.net 版本的郵件接收程序,我們知道,在asp+中發送email是見很方便的事情([url]http://www.asp888.net/lanmu/viewarticle.asp?id=95[title]asp+發送email完全手冊[/title][/url]),可是怎么進行
收取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的信箱進行管理。這個程序主要是對asp.net
操作pop服務器進行編程,加上時間倉促,所以很多地方都直接用了response.write("")這樣的語句,我的意思是這篇文章
只是簡單的知識講解,大家最終具體應用的時候,肯定是要另外優化這段程序的!那邊有人扔磚頭了:這個豆腐怎么這么懶:)