上一篇:两个获取http页面的c#函数 >>
asp.net实现pop功能
豆腐制作 都是精品
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("")这样的语句,我的意思是这篇文章
只是简单的知识讲解,大家最终具体应用的时候,肯定是要另外优化这段程序的!那边有人扔砖头了:这个豆腐怎么这么懒:)
下一篇:深入讲解 ASP+ 验证 (转自ms 一) >>
相关文章:
- · .net的几个重要问题
- · 解决问题的方法:(JspFuns与开心的对话录)
- · 控件发布:带日期标注的日历控件。
- · 续上文:由于16K的限制,只能再接一节了。
- · 为什么我在中文win2000+sp1上装的vs.net不能创建各种web application,而英...
- · ASP.NET中密码保护,MD5和SHA1算法的使用
- · ASP。NET连SQL7接口源代码?
- · 我对.Net技术中asp.net应用的一点看法
- · 从一个舆论调查的制作谈面向对象的编程思路(一)
- · 从一个舆论调查的制作谈面向对象的编程思路(二)
- · 从一个舆论调查的制作谈面向对象的编程思路(三)
- · 从一个舆论调查的制作谈面向对象的编程思路(五)
- · 在asp.net中使用组件,也包括import和asemble的区别
- · 从一个舆论调查的制作谈面向对象的编程思路(四)
- · 分别用DataGrid、Repeater、DataList绑定XML数据的例子
- · 用DataList 控制元件开发的一个简单的留言本程序:
- · .Net边学边讲(二)
- · .Net边学边讲(一)
- · 里面是对一个body的属性进行server的一些设定,不过可以衍生到其他的一些htmlcontrol新手看看,或者有点...
- · 一个实现自定义event的文章。。。我还没有完全摸透。。不知道有没人有兴趣。。新手就不用看了,先学会走...
- · Server.Transfer,Response.Redirect 和 Page.Navigate 的区别
- · ASP.NET发送ICQ消息DIY
- · web页面用水晶报表的例子
- · Creating Custom Portal Modules
- · 几个.net的重要问题
- · SQL命令中DateTime格式参考
- · 关于webcontrol和pagelet的一点看法
- · 关于.net的几个重要问题的bigeagle版本
- · 关于datagrid的使用以及动态修改,以及使用存储过程的介绍
- · 转阿土伯推荐的文章:在 VS.NET 中编写 Web 应用程序(附图)(推荐)
- · 转新技术网:在ASP.NET中使用.NET组件
- · 自己写的一个资料验证的asp.net程序,大家看看吧!
- · 关于在ASP.NET 中进行调试的方法(转载自itpeople),不过我个人对第三招不以为然,有了vs.net还要那个...
- · 菜鸟入门篇---有关ASP.NET的一些基本说明,解释. [页面标识]
- · 我的第一个ASP+程序,如果是新手请进来看吧。谢绝高手。:)
- · Security Hole In ASP.NET Beta 1 (from angryCoder)
- · 关于从toolbox内拖放控件到form时出错的解决办法
- · XML、DataSet、DataGrid结合写成广告管理程序(上)(转载)
