首页 > 编程 > .NET > 正文

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