使用asp+的獨(dú)特的底層設(shè)置的技巧完成對(duì)Pop服務(wù)器的存取(完成了asp+收pop信件的技巧)
發(fā)表時(shí)間:2023-08-11 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]http://www.asp888.net 豆腐技術(shù)站 前面我曾經(jīng)講過(guò)如何在asp.net下利用socket編程實(shí)現(xiàn)域名查詢,詳細(xì)情況請(qǐng)看文章:asp+中實(shí)現(xiàn)域名查詢的完整代碼豆腐有一天突然想,既然...
http://www.asp888.net 豆腐技術(shù)站
前面我曾經(jīng)講過(guò)如何在asp.net下利用socket編程實(shí)現(xiàn)域名查詢,詳細(xì)情況請(qǐng)看文章:asp+中實(shí)現(xiàn)域名查詢的完整代碼
豆腐有一天突然想,既然可以利用socket實(shí)現(xiàn)域名查詢,那是不是只要是利用到socket客戶端
編程的以前的 Windows 桌面程序都可以用asp.net 實(shí)現(xiàn)呢?說(shuō)干就干,我第一個(gè)準(zhǔn)備要做的就是
一個(gè)asp.net 版本的郵件接收程序,我們知道,在asp+中發(fā)送Email是見(jiàn)很方便的事情(asp+發(fā)送Email完全手冊(cè)),可是怎么進(jìn)行
收取pop信件的程序呢?看來(lái)只有拿出豆腐的殺手劍了:)
首先我們來(lái)看看這個(gè)程序的代碼: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服務(wù)器IP地址
TCPClient tcpc = new TCPClient();
if (0 == tcpc.Connect(popserver, 110))
{
//如果程序執(zhí)行到這里,就表示連接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 的歡迎語(yǔ)
strRet=Logon(tcpc,user,pass);
if(JudgeString(strRet)!="+OK"){
Response.Write("對(duì)不起,沒(méi)有這個(gè)用戶/密碼 不匹配");
return;
}
//用戶和密碼 匹配,下面開(kāi)始 統(tǒng)計(jì)用戶信箱的信息
//這個(gè)數(shù)組中包括了所有的返回信息
arrRet=StaticMailBox(tcpc);
if(arrRet[0]!="+OK"){
Response.Write("出錯(cuò)了!");
return;
}
Response.Write("當(dāng)前的用戶<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("出錯(cuò)了");
}
Response.Write("郵件日期:" + arrRet[1] + "\n<br>");
Response.Write("發(fā)信人:" + arrRet[2] + "\n<br>");
Response.Write("收信人:" + arrRet[3] + "\n<br>");
Response.Write("郵件主題:" + arrRet[4] + "\n<br>");
Response.Write("郵件內(nèi)容:" + arrRet[5] + "\n<br>");
//關(guān)閉Socket聯(lián)結(jié)
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){
//這個(gè)函數(shù)的功能是 對(duì) 獲得聯(lián)結(jié)的用戶 身份進(jìn)行驗(yàn)證
//發(fā)送 用戶代碼
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"){
//表示沒(méi)有這個(gè)信件 或者 其他的錯(cuò)誤
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; //現(xiàn)在開(kāi)始接收 Body 的信息
if(arrTemp[0]=="Date"){
arrRet[1]=arrTemp[1]; //信件的發(fā)送日期
}
if(arrTemp[0]=="From")
arrRet[2]=arrTemp[1]; //發(fā)信人
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>
好了大家通過(guò)這個(gè)程序,首先可以了解到pop(Post Ofice Protocal)協(xié)議,其次可以加深對(duì)asp.net的socket 程序的
理解,還可以通過(guò)這個(gè)程序接收ISP提供的沒(méi)有Web方式收取郵件的程序?qū)SP的信箱進(jìn)行管理。這個(gè)程序主要是對(duì)asp.net
操作pop服務(wù)器進(jìn)行編程,加上時(shí)間倉(cāng)促,所以很多地方都直接用了Response.Write("")這樣的語(yǔ)句,我的意思是這篇文章