项目合作 | 广告服务 | 联系我们 | 友情链接 | 链接代码 | 短信服务 | 给我留言 | 返回首页                    
设为首页
加入收藏
ASP技术 | ASP.NET技术 | JSP技术 | Servlet技术 | PHP技术 | JS技术 | C#技术 | Java技术 | B/S应用 | B/S论坛 | 下载区
 
 自定义DataGrid分页设置
 ASP.NET中使用Caching
 一个文件上传的类
 ASP.NET中在线用户统计
 网站间共享数据的WebService
 ASP.NET里的事务处理
 VS.NET下web项目源代码管理
 用TreeView实现树菜单
 在DataGrid中创建一个弹出式窗.
 有关DataGrid显示数据的问题
 让Calendar在页面调用时才显示.
 在web.config中建立数据库连接.
 实时天气及24小时天气预报
 数据库中图片存储及读取
 如何在窗体和窗体之间传送数据.
 利用ASP.NET来访问Excel文档
 使用嵌套的Repeater控件
 用asp.net画饼图
 实现DataList控件的分页
 用ASP.NET加密口令
 使用RangeValidator
 C#做的ASP.NET登錄篇
 ASP.NET图象处理详解
 在网页中动态的生成一个图片
 检测含有中文字符串的实际长度.
 用ASP.NET和XML做的新闻系统
 如何在asp.net中操作文件
 ASP.NET验证控件祥解
 ASP.NET中的事务处理和异常处理.
 ASP.NET上传文件的实例
 在ASP.NET中访问SQL Server
 ASP.NET安全身份验证的实现
 ASP.NET中密码保护
 在ASP.NET中使用.NET组件
 实现Web文件的上传
 asp.net实现pop功能
 ASP.NET创建文件并写入内容
 在ASP.NET中动态生成图形
 ASP.NET中文显示之两种解决方法.
 ASP.NET验证控件详解
 在ASP.NET中使用.NET组件
 资料验证的asp.net程序
 一个完整的案例
 在ASP+的Form中检查填写是否正.
 增加修改删除一个数据
 个性化的分页实现
 用ASP.NET识别浏览器
 DataGrid学习七
 DataGrid学习六
 DataGrid学习五
 DataGrid学习四
 DataGrid学习三
 DataGrid学习二
 DataGrid学习一
 DataTable控件的使用
 RegularExpressionValidator
 ViewState初探
 ASP.Net的Session
 ASP.Net的Application
 AdRotator控件的使用
 ASP.Net的Cookie实现
 XML、DataSet、DataGrid结合二.
 XML、DataSet、DataGrid结合一.
 ASP.NET中的Web Controls
 ASP.NET程序数组功能调用
 ASP.NET与ASP的不同
 ASP.net发送Email
 ASP.NET、JSP及PHP之间的抉
 

asp.net实现pop功能

转载自:豆腐技术站                   人气:4407

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

如有疑问,请赐电邮:webmaster@chinabs.net  OICQ:28194826
技术开发:深圳市百越软件工作室
中国BS网版权所有     Copyright chinabs.net