⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 h20000424-11.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html><head><script language="JavaScript">	function reset(){   for ( var i=0; i < document.Form1.elements.length; i++ )     { document.Form1.elements[i].options[0].selected=true }}function going(url){        parent.location=url;        reset();}</script><style><!--A:link {text-decoration: none; color: #000000; font-family: 宋体}A:visited {text-decoration: none; color: #000000; font-family: 宋体}A:active {text-decoration: none; font-family: 宋体}A:hover {text-decoration: underline:#ffffff; color: #ff0000}body,table {font-size: 9pt; font-family: 宋体}.H1 {font-size: 9pt ; line-height:9pt; align=center}.ourfont {font-size: 9pt ; line-height:9pt; }.ourfont1 {font-size: 9pt ; line-height:9pt; }--></style><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>监视POP3信箱</title></head><body topmargin="0" leftmargin="0"><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody>  <tr>    <td><p class="content4"><span class="font"><img border="0" height="3" src="../../soft/pix.gif" width="700"></span></td>  </tr></tbody></table></center></div><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody>  <tr>    <td bgColor="#3399ff" width="658"><p class="ourfont"><span class="font">&nbsp; </span><a style="text-decoration: none; color: rgb(255,255,255)" href="../os/H00705-2.htm">操作系统</a><font color="#FFFFFF"><span class="font"><span> |</span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../image/H00705-14.htm">图像处理</a><font color="#FFFFFF"><span>|<span class="font"> </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../autoCAD/H00705-19.htm">辅助设计</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../data/H00705-18.htm">数     据 库</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="H00706-1.htm">高级编程</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../netuse/H00705-20.htm">网络应用</a><font color="#FFFFFF"><span><span class="font"> | </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../webpage/H00705-21.htm">网页制作</a><font color="#FFFFFF"><span><span class="font"> |</span></span></font> <a style="color: rgb(255,255,255); text-decoration: none" href="../technic/H00706-3.htm">技术交流     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </a><a style="color: rgb(255,255,255); text-decoration: none" href="http://202.100.13.77/clslyb/default.asp?clsid=jiaoc"><font color="#FFFFFF"><strong>过客留言</strong></font></a></td>    <td bgColor="#3399ff" width="32"><p align="center" class="ourfont"><a href="mailto:net@163.sn.cn"><img src="../../soft/email.gif" alt="email.gif (493 字节)" border="0" WIDTH="20" HEIGHT="19"></a></td>  </tr></tbody></table></center></div><div align="center"><center><table border="1" cellSpacing="1" width="700" bordercolor="#3399FF"><tbody>  <tr>    <td align="left" bgColor="#FFFFFF" vAlign="top" width="700" bordercolor="#0000FF" bordercolorlight="#0000FF" bordercolordark="#0000FF"><p class="ourfont"> </p>    <p align="center"><b>监视POP3信箱</b></p>    <p><br>    ----本文将向大家介绍怎样编写自己的信箱监视程序,程序将直接调用WinSock函数来进行网络通信。除了具备WinSock编程知识之外,还必须了解POP3协议。下面是对POP3的一个粗略的介绍,读者可以参看RFC     1225更为详细地了解该协议。<br>    <br>    一、关于POP3协议<br>    ----POP3服务器程序通常在TCP端口110提供服务。当客户想要使用服务时,它便与服务器建立一个TCP连接。一旦连接建立,POP3服务器就向客户发送一条欢迎消息。然后客户开始给服务器发送命令,服务器则给出相应的回<br>    答。POP3的命令由一个关键词或者关键词加参数组成。每个命令以回车换行(0xD0xA)作为结束标志。对于所有的命令,POP3服务器都会提供一个回答。服务器的回答由一个状态标志加一些附加信息组成。目前使用的两个标志是“+OK”和“-ERR”,分别表示客户的命令是否合法。所有的回答也是以回车换行结束。<br>    ----与本文讨论的话题相关的四个POP3命令是USER、PASS、LIST和QUIT。<br>    <br>    USER命令&nbsp;<br>    格式USER name&nbsp;<br>    ----其中name是用户在该POP3服务器上的用户标识。客户应该在接到服务器的欢迎消息后或者在上一个USER或者PASS失败之后可以发送此命令。<br>    <br>    PASS命令<br>    格式PASS string&nbsp;<br>    <br>    ----其中string为该用户的密码。客户在发送了USER命令并且收到了+OK的回答之后方可发送此命令。如果用户名和密码都正确,服务器回答+OK,否则-ERR。<br>    <br>    LIST命令&nbsp;<br>    格式LIST&nbsp;<br>    ----如果该用户有邮件,则LIST命令会回答+OK,并列出所有邮件的标识符和大小(每个邮件一行),最后一个仅包含一个句点的行(0xD0xA0x2E)表示整个回答的结束。如果该用户没有邮件,有些服务器会返回-ERR,有些<br>    在可能返回一个+OK和一个仅包含一个句点的行。当然,客户必须在PASS命令通过之后客户程序才能给服务器发送LIST命令。<br>    <br>    QUIT命令<br>    <br>    ----从POP3服务器上退出登录。<br>    <br>    二、实现相关函数<br>    ----接下来我们按照POP3协议所定义的通信规则来实现一个名叫POP3CheckMail的函数,只要调用此函数,我们就可以检测信箱了。<br>    ----下面的代码是用与Delphi4兼容的Pascal语言实现的,我们必须包含WinSock单元,并且在调用下列函数之前初始化好WinSock动态连接库。初始化WinSock动态连接库的代码如下:<br>    <br>    ----if WSAStartup( $002, wsadata)&lt;&gt;0 then Halt;&nbsp;<br>    <br>    ----POP3CheckMail的原型如下:&nbsp;<br>    <br>    ----function POP3CheckMail(Email,Password:String;var MailList:TStringList;var     ErrorMsg:String):Bool;&nbsp;<br>    <br>    ----参数说明:&nbsp;<br>    <br>    ----Email和Password分别为用户的email信箱名和口令。&nbsp;<br>    <br>    <br>    ----变量参数MailList用于返回邮件的标识和大小,MailList.Count表示邮件的封数。<br>    <br>    ----变量参数ErrorMsg返回出错消息。<br>    <br>    ----以下是POP3CheckMail及其它所用到的函数的实现代码。<br>    <br>    Connect_Server函数<br>    <br>    ----功能:与指定的主机建立一个TCP连接,返回一个Socket描述符。参数host指定主机的名字,Port指定端口号。<br>    <br>    function Connect_Server(host:string;Port:integer):integer;<br>    var i:integer;<br>    p:&amp;LongInt;<br>    phe:pHostEnt;<br>    sin:sockaddr_in;<br>    begin<br>    sin.sin_family:=AF_INET;<br>    sin.sin_port:=htons(Port);<br>    //Get the IP for host, allowing for dotted decimal<br>    phe:=gethostbyname(pchar(host));<br>    if phe&lt;&gt;nil<br>    then begin<br>    p:=Pointer(phe&amp;.h_addr_list&amp;);<br>    sin.sin_addr.s_addr:=p&amp;;<br>    end<br>    else begin<br>    i:=inet_addr(PChar(Host));<br>    if i&lt;&gt; -1 then sin.sin_addr.S_addr:=i<br>    end;<br>    //create a socket<br>    Result:=socket(PF_INET,SOCK_STREAM,0);<br>    if (Result=INVALID_SOCKET) then Exit;<br>    //connect to server<br>    if Connect(Result,sin,sizeof(sin))=SOCKET_ERROR<br>    then begin {Error handling} end;<br>    end;<br>    Write_Socket函数&nbsp;<br>    <br>    ----功能:向Socket写入一个字符串。&nbsp;<br>    <br>    function Write_Socket(sockfd:Integer; const s:string):Integer;<br>    begin<br>    result:=Winsock.Send(sockfd,pointer(s)&amp;,Length(s),0)<br>    end;<br>    Socket_Readline函数&nbsp;<br>    <br>    ----功能:从Socket上读取一行。&nbsp;<br>    <br>    function Socket_Readline(sockfd:Integer):String;<br>    //Read until #10<br>    var S:String; buf:array[0..1]of Char;<br>    n:Cardinal;<br>    begin<br>    buf[0]:= #0;buf[1]:= #0; S:=‘`;<br>    n:=recv(sockfd,Buf,1,0);<br>    while n&gt;0 do begin<br>    buf[1]:= #0;<br>    S:=S +buf;<br>    if (buf[0]= #10) then Break;<br>    n:=recv(sockfd, buf, 1, 0);<br>    end;<br>    Result:=Trim(S);<br>    end;<br>    Pop3Response 函 数&nbsp;<br>    <br>    ----功能:读取POP3服务器的一行返回信息,如果是“+OK”则函数返回TURE,如果是“-ERR”则返回FALSE。&nbsp;<br>    <br>    function Pop3Response(Sockfd:Integer):Bool;<br>    var S: string;<br>    begin<br>    S:=socket_readline(sockfd);<br>    if copy(s,1,3)=‘ +OK` then Result:=True<br>    else {if copy(s,1,4)=‘ -ERR` then }Result:=False;<br>    end;<br>    POP3CheckMail函数&nbsp;<br>    <br>    ----功能:检测名字为email的信箱,如果有新邮件,则通过变量参数MailList将每一封邮件的大小返回。<br>    <br>    function POP3CheckMail<br>    (Email,Password:String;var MailList:<br>    TStringList;var ErrorMsg:String):Bool;<br>    var sockfd,i:integer;<br>    S, Host, User:String;<br>    begin<br>    Result:=False; ErrorMsg:=‘`;<br>    if MailList=nil then Exit;<br>    S:=Trim(Email);<br>    i:=Pos(‘@`,Email);<br>    User:=Trim(Copy(S,1,i -1));<br>    Host:=Trim(Copy(S,i +1,Length(Email) -i));<br>    MailList.Clear;<br>    if (user=‘`)or(host=‘`) then begin&nbsp;<br>    ErrorMsg:=‘Invalid email address.`;exit; end;<br>    if (Host[1]=‘[`)and (Host[Length(host)]=‘]`)<br>    then begin Host[1]:=‘ `;Host[Length(host)]:= #0;end;<br>    Host:=Trim(host);<br>    sockfd:=Connect_Server(Host,110);<br>    if not Pop3Response(sockfd)then begin ErrorMsg:=<br>    ‘Cannot connect to server`;exit; end;<br>    Write_Socket(sockfd,‘USER ` +User + #13 #10);<br>    IF NOT POP3Response(sockfd) then begin ErrorMsg:=<br>    ‘USER failed`; Exit;end;<br>    Write_Socket(sockfd,‘PASS ` +Password + #13 #10);<br>    IF NOT POP3Response(sockfd) then begin ErrorMsg:=<br>    ‘PASS failed`; Exit;end;<br>    Write_Socket(sockfd,‘LIST` #13 #10);<br>    POP3Response(sockfd);<br>    while true do begin<br>    s:=Socket_readline(sockfd);<br>    if s=‘.` then BREAK;<br>    MailList.Add(S);<br>    end;<br>    Write_Socket(sockfd,‘QUIT` #13 #10);<br>    Closesocket(sockfd);<br>    Result:=True;<br>    end;<br>    三、邮件的检测&nbsp;<br>    ----下面我们来看一个使用POP3CheckMail函数的简单示例。&nbsp;<br>    var MailList:TstringList;<br>    ErrorMsg:String;<br>    ....<br>    MailList:=TstringList.Create;<br>    POP3CheckMail(‘simon_liu@263.net`,&nbsp;<br>    ‘mypassword`, MailList, ErrorMsg);<br>    If MailList.Count&gt;0 then<br>    MessageBox(0, Pchar(‘You have ` +IntToStr<br>    (MailList.Count) + ‘ new messages!`),&nbsp;<br>    ‘New Message!`, MB_ICONINFORMATION)<br>    Else if ErrorMsg=‘` then MessageBox<br>    (0, ‘No message!`, ‘`,0)<br>    Else MessageBox(0, Pchar(ErrorMsg), ‘Error`, 0);<br>    MailList.Free;<br>    <br>    ----如果你仔细阅读了POP3CheckMail函数的实现代码,你会发现此函数除了可以获取邮件的封数之外,还可以获得每一封邮件的大小。你可以通过POP3CheckMail函数的变量参数MailList的Strings数组来获取邮件的大小。<br>    <br>    ----实现了POP3CheckMail函数,再在此基础上编写一个POP3信箱的监视程序就变得很简单了。你可以通过一个定时器来定期地调用POP3CheckMail函数,这样你就可以监视某个email信箱了。假若你想要同时监视多个email<br>    信箱,只要为每一个信箱创建一个线程并且在线程中定期调用POP3CheckMail函数即可。你的程序中如果没有使用Delphi的控件,那么一个完整的信箱监视程序可能只有60K左右。</p>    <p>  </td>  </tr></tbody></table></center></div><hr align="center" SIZE="1" width="700"><p align="center" class="ourfont"><span><span><font color="#000000">&nbsp; <a style="color: rgb(0,0,0); text-decoration: none" href="../../soft/network/index.htm">互联网络</font><font color="#FFFFFF"> </font></a><font color="#000000">|</span></span><a href="../../soft/system/index.htm" style="color: rgb(0,0,0); text-decoration: none">系统工具</a><span>|<span> <a href="../../soft/tools/index.htm" style="color: rgb(0,0,0); text-decoration: none">实用工具</a> | <a href="../../soft/multimedia/index.htm" style="color: rgb(0,0,0); text-decoration: none">媒体工具</a> | <a href="../../soft/image/index.htm" style="color: rgb(0,0,0); text-decoration: none">图形图像</a> | <a href="../../soft/game/index.htm" style="color: rgb(0,0,0); text-decoration: none">游戏娱乐</a> | </span><a href="../../soft/usesoft/index.htm" style="color: rgb(0,0,0); text-decoration: none">软件<span>使用</a></font><font color="#FFFFFF"> |</font>&nbsp; </span></span></p><hr align="center" SIZE="1" width="700"><font color="#FFE8BB"><p align="center" class="ourfont"></font><font color="#000000"><span><span>&copy;&nbsp;Copyright 2000 </span></span>陕西公用计算机互联网信息中心<span><span> 版权所有 </font></p></span></span><p align="center" class="ourfont"><font color="#000000"><span><span>本站制作维护by <a style="color: rgb(0,0,0)" href="mailto:haiyuan@163.sn.cn">HAIYUAN</a></span></span></font></p><p align="center" class="ourfont"><font color="#000000"><span><span>电话:(029)8371051 8371055 8371049 联系信箱:<a href="mailto:net@163.sn.cn">net@163.sn.cn</a></span></span></font></p></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -