快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

利用asp+的独特的底层操作的功能实现对Pop服务器的存取(实现了asp+收pop信件的功能)

http://www.asp888.net 豆腐技术站

前面我曾经讲过如何在asp.net下利用socket编程实现域名查询,具体情况请看文章:asp+中实现域名查询的完整代码
豆腐有一天忽然想,既然可以利用socket实现域名查询,那是不是只要是利用到socket客户端
编程的以前的 Windows 桌面程序都可以用asp.net 实现呢?说干就干,我第一个预备要做的就是
一个asp.net 版本的邮件接收程序,我们知道,在asp+中发送Email是见很方便的事情(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的信箱进行治理。这个程序主要是对asp.net
操作pop服务器进行编程,加上时间仓促,所以很多地方都直接用了Response.Write(\"\")这样的语句,我的意思是这篇文章


返回类别: 教程
上一教程: 10天学会ASP.net之第一天
下一教程: 根据数据库生成xml二法

您可以阅读与"利用asp+的独特的底层操作的功能实现对Pop服务器的存取(实现了asp+收pop信件的功能)"相关的教程:
· 查看服务器磁盘、文件的aspx
· 如何使用C#访问POP3服务器
· 在ASP.Net中两种利用CSS实现多界面的方式
· 创建ASP.NET监视服务器进程
· ASP.NET中利用存储过程实现模糊查询
    微笑服务 优质保证 索取样品