<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p>用PHP实现POP3邮件的收取</p>
<p></p>
<p>编号:QA003598<br>
建立日期: 2000年11月28日 最后修改日期:2000年11月28日 <br>
所属类别: </p>
<p>其他语言 - Internet编程</p>
<p>文章: </p>
<p> 标题:用PHP实现POP3邮件的收取(一) <br>
(作者:陈俊清 2000年10月18日 11:53) <br>
</p>
<p>POP协议简介</p>
<p> 本文简要说明了通过POP3协议收取邮件、MIME邮件的解码的原理;针对收取和MIME解码,提供了两个实用的PHP类,并提供了使用的样例。分为邮件收取、MIME解码两个部分。这里我们先向您介绍邮件的收取,解码部分会在以后的文章中为各位详细的介绍,
敬请关注。 <br>
现在Internet上最大的应用应该是非Email莫属了,我们每天都习惯于每天通过Email进行交流,各大网站也几乎都推出了自己的基于WEB的免费邮件系统。在本文里,笔者将介绍一些Email实现的一些原理。同时我们假设你对于PHP的编程有一定的基础,对于TCP/IP协议也有一定的了解。
<br>
POP 协议简介 <br>
POP的全称是 Post Office Protoco ,即邮局协议,用于电子邮件的接收,现在常用的是第三版 ,简称为 POP3。通过POP协议,客户机登录到服务器上后,可以对自己的邮件进行删除,或是下载到本地,下载后,电子邮件客户软件就可以在本地对邮件进行修改、删除等。另外一种用于接收信件的邮件是
IMAP 协议,现在发展很快,在本文 <br>
中,我们暂不讨论。 <br>
POP服务器一般使用的是TCP的110号端口,如果你用的是Foxmail的话,在其收邮件的时候,你可以看到其信息提示窗口有这么一些命令: <br>
“正在连接到 62.123.23.123:110"; <br>
"USER BOSS_CH"; <br>
"PASS.............."; <br>
下面让我们来看一段 与 POP3 服务器对话的实录: <br>
telenet pop.china.com 110 <br>
+OK AIMC POP service (mail2.china.com) is ready. <br>
USER boss_ch <br>
+OK Please enter password for user . <br>
PASS ****** <br>
+OK boss_ch has 1 messages (750 octets) <br>
STAT <br>
+OK 1 750 <br>
LIST <br>
+OK 1 messages (750 octets) <br>
1 750 <br>
RETR 1 <br>
+OK 750 octets <br>
Received: from smtp2.ptt.js.cn([202.102.24.37]) by china.com(JetMail 2.5 <br>
.3.0) <br>
with SMTP id jm4839cc4227; Sat, 23 Sep 2000 05:31:21 -0000 <br>
Received: from chenjunqing ([61.155.120.6]) by smtp2.ptt.js.cn <br>
(Netscape Messaging Server 4.15) with SMTP id G1BRHJ03.V07 for <br>
<boss_ch@china.com>; Sat, 23 Sep 2000 13:34:31 +0800 <br>
Date: Sat, 23 Sep 2000 13:34:18 +0800 <br>
From: =?ISO-8859-1?Q?=B3=C2=BF=A1=C7=E5?= <Boss_ch@netease.com> <br>
To: boss_ch@china.com <boss_ch@china.com> <br>
Subject: =?ISO-8859-1?Q?=D3=CA=BC=FE=CA=BE=C0=FD?= <br>
X-mailer: FoxMail 3.1 [cn] <br>
Mime-Version: 1.0 <br>
Content-Type: text/plain; charset="GB2312" <br>
Content-Transfer-Encoding: 8bit <br>
Message-ID: <G1BRHJ03.V07@smtp2.ptt.js.cn> <br>
您好! <br>
这是一个邮件的小示例 <br>
QUIT <br>
+OK Pop server at <mail2.china.com> signing off. <br>
以下对几个常用的POP3命令作一个简单的介绍 : <br>
<br>
命令 参数 状态 描述 <br>
------------------------------------------ <br>
USER username 认可 此命令与下面的pass命令若成功,将导致状态转换 <br>
PASS password 认可 <br>
APOP Name,Digest 认可 Digest是MD5消息摘要 <br>
<br>
------------------------------------------ <br>
STAT None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数 <br>
UIDL [Msg#] 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的 <br>
LIST [Msg#] 处理 返回邮件数量和每个邮件的大小 <br>
RETR [Msg#] 处理 返回由参数标识的邮件的全部文本 <br>
DELE [Msg#] 处理 服务器将由参数标识的邮件标记为删除,由quit命令执行 <br>
RSET None 处理 服务器将重置所有标记为删除的邮件,用于撤消DELE命令 <br>
TOP [Msg#] 处理 服务器将返回由参数标识的邮件前n行内容, n必须是正整数 <br>
NOOP None 处理 服务器返回一个肯定的响应,不做任何操作。 <br>
<br>
------------------------------------------ <br>
QUIT None 更新 退出 <br>
</p>
<p> -- <br>
用PHP实现POP3收取邮件的类 <br>
现在让我们来用PHP实现一个通过POP3协议收取信件的类吧,这个类中所用到的一些sock操作的函数,不另做特殊说明,请参考php的有关资料。通过这个实例,相信你也会和我一样,感觉到PHP中对于sock操作的灵活、方便和功能的强大。
<br>
首先,我们来说明一下这个类中需要用到的一些内部成员变量:(这些变量应该都是对外封闭的,可是由于php对类的成员变量没有private与publice之类的分别,只好就这么直接定义了。这是PHP的一个令人遗憾的地方。)
<br>
1.成员变量说明 <br>
class pop3 <br>
{ <br>
var $hostname=""; // POP主机名 <br>
var $port=110; // 主机的POP3端口,一般是110号端口 <br>
var $timeout=5; // 连接主机的最大超时时间 <br>
var $connection=0; // 保存与主机的连接 <br>
var $state="DISCONNECTED"; // 保存当前的状态 <br>
var $debug=0; // 做为标识,是否在调试状态,是的话,输出调试信息 <br>
var $err_str=''; // 如果出错,这里保存错误信息 <br>
var $err_no; //如果出错,这里保存错误号码 <br>
var $resp; // 临时保存服务器的响应信息 <br>
var $apop; // 指示需要使用加密方式进行密码验证,一般服务器不需要 <br>
var $messages; // 邮件数 <br>
var $size; //各邮件的总大小 <br>
var $mail_list; // 一个数组,保存各个邮件的大小及其在邮件服务器上序号 <br>
<br>
var $head=array(); // 邮件头的内容,数组 <br>
var $body=array(); // 邮件体的内容,数组; <br>
2.当然,这其中的有些变量,仅通过这样一个简单的说明并不能完全了解如何使用 <br>
,下面我就逐个来说明这个类实现中的一些主要方法: <br>
Function pop3($server="192.100.100.1",$port=110,$time_out=5) <br>
{$this->hostname=$server; <br>
$this->port=$port; <br>
$this->timeout=$time_out; <br>
return true; <br>
} <br>
熟悉面向对象编程的朋友一看就会知道,这是这个类的构造函数,在初始化这个类时,可以给出这几个最基本的参数:pop3服务器的地址,端口号,及连接服务器时的最大超时时间。一般来说,只需要给出POP3服务器的地址就行了。
<br>
Function open() <br>
{ <br>
if($this->hostname=="") <br>
{$this->err_str="无效的主机名!!"; <br>
return false; <br>
} <br>
<br>
if ($this->debug) echo "正在打开 $this->hostname,$this->port,&$err_no,
<br>
&$err_str, $this->timeout<BR>"; <br>
if (!$this->connection=fsockopen($this->hostname,$this->port,&$err_no,
& <br>
$err_str, $this->timeout)) <br>
{ <br>
$this->err_str="连接到POP服务器失败,错误信息:".$err_str."错误号:".$e
<br>
rr_no; <br>
return false; <br>
} <br>
else <br>
{ <br>
$this->getresp(); <br>
if($this->debug) <br>
$this->outdebug($this->resp); <br>
if (substr($this->resp,0,3)!="+OK") <br>
{$this->err_str="服务器返回无效的信息:".$this->resp."请检查POP服务器是
<br>
否正确"; <br>
return false; <br>
} <br>
$this->state="AUTHORIZATION"; <br>
return true; <br>
} <br>
} <br>
该方法不需要任何参数就可建立与POP3服务器的sock连接。该方法又用到了另一个类中的方法$this->getresp();下面是这个方法的声明:
<br>
Function getresp() <br>
{ <br>
for($this->resp="";;) <br>
{ <br>
if(feof($this->connection)) <br>
return false; <br>
没有合适的资源?快使用搜索试试~ 我知道了~
Web2Ftp Client
需积分: 50 42 下载量 192 浏览量
2006-03-16
00:00:00
上传
评论
收藏 600KB GZ 举报
温馨提示
共103个文件
php:66个
html:10个
jpg:8个
软件界面帖图: http://www.9812.net/xuser/release/site/release.html
资源推荐
资源详情
资源评论
收起资源包目录
Web2Ftp Client (103个子文件)
EN.inc.bak 441B
HZ_CN.inc.bak 433B
style.css 500B
style.css 447B
style.css 412B
logo.gif 4KB
logo.gif 4KB
netkiller.gif 4KB
netkiller.gif 4KB
logo.gif 365B
logo.gif 360B
netkiller.gif 309B
updatefile.htm 895B
updatefile.htm 895B
updatefile.htm 895B
updatefile.htm 582B
sign.html 2KB
tree.html 2KB
sign.html 1KB
tree.html 910B
main.html 613B
sign.html 542B
main.html 411B
main.html 411B
readme.html 159B
index.html 84B
chen.jpg 158KB
chen.jpg 158KB
netkiller.jpg 107KB
netkiller.jpg 107KB
netkiller.jpg 369B
netkiller.jpg 364B
chen.jpg 313B
chen.jpg 313B
ftp.js 1KB
untitled.php 46KB
pop1.php 14KB
ldap.php 9KB
sysinfo.php 8KB
pop.php 8KB
list.php 8KB
list.php 7KB
ftptree.php 6KB
!list1.php 6KB
!!list.php 6KB
function.php 6KB
!!list.php 6KB
bigicon.php 5KB
miniature.php 4KB
ldapadd.php 4KB
tree.php 4KB
smtp_mail.class.php 3KB
remote.php 3KB
!sysinfo.php 3KB
ftp.inc.php 2KB
global.inc.php 2KB
endes.php 2KB
function.php 2KB
ldapmodify.php 2KB
mkdir.php 2KB
mkdir.php 2KB
login.php 2KB
test.php 2KB
updatefile.php 1KB
updatefile.php 1KB
updatefile.php 1KB
ldapdelete.php 1KB
index.php 1KB
ftpput.php 1KB
editcode.php 1KB
ldapdetails.php 1KB
editcode.php 1KB
rename.php 1KB
rename.php 1KB
HZ_CN.inc.php 1KB
upload.php 1KB
upload.php 1KB
upload.php 1KB
send.php 1KB
tmp.php 1KB
mainframe.php 1KB
rmdir.php 1KB
rmdir.php 1KB
delete.php 988B
delete.php 988B
showcode.php 985B
showcode.php 936B
up.php 895B
up.php 895B
text_mail.class.php 807B
EN.inc.php 786B
writecode.php 687B
writecode.php 687B
writecode.php 687B
index.php 459B
index.php 454B
ftpquit.php 310B
operate.php 275B
login.php 192B
updatefile.php 173B
共 103 条
- 1
- 2
资源评论
9812
- 粉丝: 1
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用C语言与python分别实现文件的读写功能
- zephyr sdk package 2
- zephyr sdk package 1
- optimization.ipynb
- 数据库标识码BSM重排序工具、重构标识码工具
- 基于C语言的校园导航系统报告.doc
- __init__.py
- tensorflow-gpu-2.6.5-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-rocm-2.13.1.600-cp38-cp38-manylinux2014-x86-64.whl
- tensorflow-rocm-2.13.0.570-cp311-cp311-manylinux2014-x86-64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功