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("")这样的语句,我的意思是这篇文章
只是简单的知识讲解,大家最终具体应用的时候,肯定是要另外优化这段程序的!那边有人扔砖头了:这个豆腐怎么这么懒:)