IMAP 的全名是 Internet Message Access Protocol,即网际网络信息存取协议,为美国史丹福大学 (Stanford University) 在 1986 年开始研发的多重邮箱电子邮件系统。PHP 所提供的功能是 IMAP 4 的系统,这是根据 RFC 1730 所实作的。更多有关 IMAP 的信息可以参考 IMAP 的官方网站 http://www.imap.org 。 欲使用 IMAP 的电子邮件功能,要先到 ftp://ftp.cac.washington.edu/imap 下载 IMAP 的客户端程序。在编译完成之后将 c-client/c-client.a 复制到 /usr/local/lib 之中,并将 c-client/rfc822.h、mail.h 及 linkage.h 三个文件复制到 /usr/local/include 之下。之后编译 PHP 程序时要加入 --with-imap 的选项。 |
imap_append 附加字符串到指定的邮箱中。 语法: int imap_append(int imap_stream, string mbox, string message, string [flags]); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数可在指定的电子邮箱中增加附加的字符串。参数 imap_stream 为 IMAP 的代号。参数 mbox 为电子邮箱的位址。参数 message 为欲附加的信息。参数 flag 为可省略的标志,表示电子邮箱的标志值。治募注意的是要与 Cyrus IMAP 服务器沟通时,应使用 rn 作为行结束字符 (end-of-line, EOL)。若有错误则返回 false 值。
imap_base64 解 BASE64 编码。 语法: string imap_base64(string text); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数可将用 BASE64 编码字符串解码。返回值是解码后的字符串。 参考 imap_binary() base64_encode() base64_decode() imap_body 读信的内文。 语法: string imap_body(int imap_stream, int msg_number, int [flags]); 返回值: 字符串 函数种类: 网络系统 内容说明 本函数可读取信件的内文 (body) 部份。参数 imap_stream 为 IMAP 的代号。参数 msg_number 为信件的序号。参数 flags 可省略,有下列的值 FT_UID : 信件序号为 UID。 FT_PEEK : 若无配置 Seen 标志则不要设本标志。 FT_INTERNAL : 返回字符串使用系统格式,不要刻意转成 CRLF 行结束标准。 使用范例 本例利用 IMAP 协议读取 myid@localhost 的第一封信件。 <?php $mbox = imap_open("{localhost:143}INBOX","myid","mypw"); $message = imap_body($mbox, 1); imap_close($mbox); echo $message; ?> imap_check 返回邮箱信息。 语法: object imap_check(int imap_stream); 返回值: 类 函数种类: 网络系统 内容说明: 本函数可取得目前电子邮箱的信息。返回值为类类型,包含下面的属性
类属性 | 代表意义说明 |
---|
Date | 最新邮件的日期 | Driver | 使用的界面 | Mailbox | 电子邮箱网址 | Nmsgs | 总邮件数目 | Recent | 新进邮件数目 | 参考 imap_mailboxmsginfo()imap_close 关闭 IMAP 链接。 语法: int imap_close(int imap_stream, int [flags]); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数用来关闭 IMAP 的资料流,亦即结束链接。可省略的参数 flags 的值若为 CL_EXPUNGE 则在关闭链接前会将电子邮件信箱清空。 imap_createmailbox 建立新的信箱。 语法: int imap_createmailbox(int imap_stream, string mbox); 返回值: 整数 函数种类: 网络系统 内容说明 本函数用来建立新的信箱。成功则返回 true 值。 imap_delete 标记欲删除邮件。 语法: int imap_delete(int imap_stream, int msg_number); 返回值: 整数 函数种类: 网络系统 内容说明 本函数仅用来标记欲删除之邮件。实际删除的指令 imap_expunge() imap_deletemailbox 删除既有信箱。 语法: int imap_deletemailbox(int imap_stream, string mbox); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数用来删除既有的信箱。成功则返回 true 值。 imap_expunge 删除已标记的邮件。 语法: int imap_expunge(int imap_stream); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数用来删除已加入删除标记的邮件。欲标记邮件须使用 imap_delete() 函数。 imap_fetchbody 从信件内文取出指定部分。 语法: string imap_fetchbody(int imap_stream, int msg_number, string part_number, flags [flags]); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数可读取信件的内文 (body) 部份。参数 imap_stream 为 IMAP 的代号。参数 msg_number 为信件的序号。参数 part_number 为指定的部分。参数 flags 可省略,有下列的值 FT_UID : 信件序号为 UID。 FT_PEEK : 若无配置 Seen 标志则不要设本标志。 FT_INTERNAL : 返回字符串使用系统格式,不要刻意转成 CRLF 行结束标准。 imap_fetchstructure 获取某信件的结构信息。 语法: array imap_fetchstructure(int imap_stream, int msg_number); 返回值: 数组 函数种类: 网络系统 内容说明 本函数可读取指定信件的相关信息。参数 imap_stream 为 IMAP 的代号。参数 msg_number 为信件的序号。返回的信息为数组的方式,各元素的内容见下表
元素名称 | 类型 |
---|
type | 整数 (Integer) | encoding | 整数 (Integer) | ifsubtype | 布尔 (Boolean) | subtype | 字符串 (String) | ifdescription | 布尔 (Boolean) | description | 字符串 (String) | ifid | 布尔 (Boolean) | id | 字符串 (String) | lines | 整数 (Integer) | bytes | 整数 (Integer) | ifparameters | 布尔 (Boolean) |
其中 type 元素的值代表的意义如下 值 | 代表意义 |
---|
0 | 文字 text | 1 | 复合 multipart | 2 | 信息 message | 3 | 程序 application | 4 | 声音 audio | 5 | 图形 image | 6 | 影像 video | 7 | 其它 other |
而 encoding 值代表的意义如下 值 | 代表意义 |
---|
0 | 七位 (7 bit) | 1 | 八位 (8 bit) | 2 | 二进位 (binary) | 3 | BASE64 编码 | 4 | QP 编码 (QuotedPrintable) | 5 | 其它 |
imap_header 获取某信件的标头信息。 语法: object imap_header(int imap_stream, int msg_number, int [fromlength], int [subjectlength], int [defaulthost]); 返回值: 类 函数种类: 网络系统 内容说明: 本函数可读取指定信件的标头信息。 msg_number 为信件的序号。返回类有下列的属性:Answered、bcc、bccaddress、cc、ccaddress、Date、date、Deleted、fetchfrom、fetchsubject、Flagged、followup_to、from、fromaddress、in_reply_to、MailDate、message_id、Msgno、newsgroups、Recent、references、remail、reply_to、reply_toaddress、return_path、return_pathaddress、sender、senderaddress、Size、Subject、subject、to、toaddress、udate、Unseen。 imap_headers 获取全部信件的标头信息。 语法: array imap_headers(int imap_stream); 返回值: 数组 函数种类: 网络系统 内容说明: 本函数可读取全部信件的标头信息。参数 imap_stream 为 IMAP 的代号。返回的数组一个元素为某一封信的标头。 使用范例 <?php $mb = imap_open("{my.imap.com.tw}INBOX", "wilson", "mypasswd"); $AllHeaders = imap_headers($mb); imap_close($mb); echo "<pre>n"; for ($i=0; $i < count($AllHeaders); $i++) { echo $AllHeaders[$i]."<p><hr><p>n"; } echo "</pre>n"; ?> imap_listmailbox 获取邮箱列示。 语法: array imap_listmailbox(int stream_id, string ref, string pattern); 返回值: 数组 函数种类: 网络系统 内容说明: 本函数可获得邮箱列示。参数 imap_stream 为 IMAP 的代号。参数 ref 通常为 IMAP 服务器名称,参考下例。参数 pattern 可用万用字符 * 代表全部的路径,aayawa@yahoo.com 并指出 (27-Apr-1999) 若本参数以 "" (空字符) 代入,不会返回资料。 使用范例 本例为 alank@shermanloan.com 于 02-Jun-1999 所提出的。 <?php $Account = "myid"; $Password= "mypasswd"; $mailbox = imap_open("{mail.xyz.com:143}INBOX", $Account, $Password); if ($mailbox) { $mailboxes = imap_listmailbox($mailbox, "{mail.xyz.com:143}", "*"); for ($index = 0; $index < count($mailboxes); $index++) { print($mailboxes[$index] . "n"); } imap_close($mailbox); } else { print("无法?/font>}启 $Account 的信箱.n"); } ?> imap_listsubscribed 获取订阅邮箱列示。 语法: array imap_listsubscribed(int stream_id, string ref, string pattern); 返回值: 数组 函数种类: 网络系统 内容说明: 本函数可获得订阅邮箱 (subscribed) 列示。参数 imap_stream 为 IMAP 的代号。参数 ref 通常为 IMAP 服务器名称。参数 pattern 可用万用字符 * 代表全部的路径。 参考 imap_listmailbox() imap_subscribe() imap_unsubscribe() imap_mail_copy 复制指定信件到它处邮箱。 语法: int imap_mail_copy(int imap_stream, string msglist, string mbox, int [flags]); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数复制指定的信件到指定的邮箱 (mailbox) 之中。参数 imap_stream 为 IMAP 的代号。参数 msglist 可以是信件号序,也可以是范围。参数 mbox 为复制的目的邮箱。参数 flags 可省略,有二种选择 CP_UID,CP_MOVE。 imap_mail_move 移动指定信件到它处邮箱。 语法: int imap_mail_move(int imap_stream, string msglist, string mbox); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数移动指定的信件到指定的邮箱 (mailbox) 之中。参数 imap_stream 为 IMAP 的代号。参数 msglist 可以是信件号序,也可以是范围。参数 mbox 为移动的目的邮箱。 imap_num_msg 取得信件数。 语法: int imap_num_msg(int imap_stream); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数可取得邮箱 (mailbox) 的信件数。参数 imap_stream 为 IMAP 的代号。 imap_num_recent 取得新进信件数。 语法: int imap_num_recent(int imap_stream); 返回值: 整数 函数种类: 网络系统 内容说明 本函数可取得邮箱 (mailbox) 的新进未读信件数。参数 imap_stream 为 IMAP 的代号。 imap_open 打开 IMAP 链接。 语法: int imap_open(string mailbox, string username, string password, int [flags]); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数可打开客户端与服务器之间的 IMAP 链接,并可链接至 POP3 或 NNTP 服务器。参数 mailbox 为服务器端的位置。参数 username 为用户帐号。参数 password 为用户的密码。参数 flags 可省略,有下列的值: OP_READONLY : 打开链接使用只读状态。 OP_ANONYMOUS : 匿名读取 NNTP 服务器,不使用 .newsrc 文件。 OP_HALFOPEN : 只与 IMAP 或 NNTP 服务器链接,不打开邮箱。 CL_EXPUNGE : 关闭链接时自动清除邮箱中的信件。 使用范例 下例分别为打开 IMAP、POP3、NNTP 的部份参考范例 <?php $mbox = imap_open("{localhost:143}INBOX","user_id","password"); ?/font>}启与 IMAP 服务器链接,IMAP 的埠 (port) 通?/font>`为 143。 $mbox = imap_open("{localhost/pop3:110}INBOX","user_id","password"); ?/font>}启与 POP3 服务器链接,POP3 的埠值为 110。 $nntp = imap_open("{localhost/nntp:119}comp.test","",""); ?/font>}启与 NNTP 服务器链接,NNTP 的埠为 119。 ?> imap_ping 检查 IMAP 是否连接。 语法: int imap_ping(int imap_stream); 返回值: 整数 函数种类: 网络系统 内容说明: 本函用来检查与 IMAP 服务器的连接状态。参数 imap_stream 为 IMAP 的代号。若仍然保持与 IMAP 服务器连接则返回 true 值。 imap_renamemailbox 更改邮箱名字。 语法: int imap_renamemailbox(int imap_stream, string old_mbox, string new_mbox); 返回值: 整数 函数种类: 网络系统 内容说明: 本函用来更改邮箱 (mailbox) 的名字。参数 imap_stream 为 IMAP 的代号。参数 old_mbox 及 new_mbox 分别为原邮箱名字及欲更换成的新邮箱名字。更换成功则返回 true 值。 imap_reopen 重开 IMAP 链接。 语法: int imap_reopen(string imap_stream, string mailbox, string [flags]); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数可重新打开客户端与服务器之间的 IMAP 链接。本函数通常与 imap_ping() 函数合用。参数 mailbox 为服务器端的位置。参数 flags 可省略,有下列的值: OP_READONLY : 打开链接使用只读状态。 OP_ANONYMOUS : 匿名读取 NNTP 服务器,不使用 .newsrc 文件。 OP_HALFOPEN : 只与 IMAP 或 NNTP 服务器链接,不打开邮箱。 CL_EXPUNGE : 关闭链接时自动清除邮箱中的信件。 使用范例 <?php $userid = "nulluser"; $passwd = "passwd38"; $mb = imap_open("(imap.null.org)INBOX", $userid, $passwd); if (!imap_ping($mb)) { imap_reopen($mb, $userid, $passwd); } imap_close($mb); ?> imap_subscribe 订阅邮箱。 语法: int imap_subscribe(int imap_stream, string mbox); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数可订阅新邮箱 (mailbox)。 imap_undelete 取消删除邮件标记。 语法: int imap_undelete(int imap_stream, int msg_number); 返回值: 整数 函数种类: 网络系统 内容说明 本函数将标记欲删除邮件取消。标记欲删除邮件需使用 imap_delete()。参数 msg_number 代表邮件的流水序号。 imap_unsubscribe 取消订阅邮箱。 语法: int imap_unsubscribe(int imap_stream, string mbox); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数可取消订阅新邮箱 (mailbox)。 imap_qprint 将 qp 编码转成八位。 语法: string imap_qprint(string string); 返回值: 字符串 函数种类: 网络系统 内容说明 本函数可将 QP (quoted-printable) 编码字符串转成八位字符串。 参考 quoted_printable_decode() imap_8bit() imap_8bit 将八位转成 qp 编码。 语法: string imap_8bit(string string); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数可将八位字符串转成 QP (quoted-printable) 编码字符串。 参考 quoted_printable_decode() imap_qprint() imap_binary 将八位转成 base64 编码。 语法: string imap_binary(string string); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数将字符串转成 MIME BASE64 编码。此编码方式可以让中文字或者图片也能在网络上顺利传输。更多的 BASE64 编码信息可以参考 RFC2045 文件之 6.8 节或是 base64_encode()。 参考 imap_base64() base64_decode() chunk_split() imap_scanmailbox 寻找信件有无特定字符串。 语法: array imap_scanmailbox(int imap_stream, string ref, string pattern, string content); 返回值: 数组 函数种类: 网络系统 内容说明: 本函用来检查与 IMAP 服务器信件中有无特定的字符串。参数 imap_stream 为 IMAP 的代号。参数 ref 通常为 IMAP 服务器名称,如 "{mail.wahaha.com:143}"。参数 pattern 为解析比对字符串的规则。参数 content 则为欲寻找的字符串内容。 取得目前邮箱的信息。 语法: object imap_mailboxmsginfo(int imap_stream); 返回值: 类 函数种类: 网络系统 内容说明: 本函用来取得目前使用中邮箱 (mailbox) 的相关信息。参数 imap_stream 为 IMAP 的代号。返回类包括下列的属性
类属性 | 代表意义说明 |
---|
Date | 最新邮件的日期 | Driver | 使用的界面 | Mailbox | 电子邮箱网址 | Nmsgs | 总邮件数目 | Recent | 新进邮件数目 | Unread | 未读邮件数目 | Size | 邮箱大小 | 参考:IMAP_CHECKimap_rfc822_write_address 电子邮件位址标准化。 语法: string imap_rfc822_write_address(string mailbox, string host, string personal); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数将电子邮件位址成为 rfc822 的标准格式。 imap_rfc822_parse_adrlist 解析电子邮件位址。 语法: object imap_rfc822_parse_adrlist(string address, string default_host); 返回值: 类 函数种类: 网络系统 内容说明: 本函数可解析电子邮件位址。返回的类包括下列属性 属性名 | 说明 |
---|
mailbox | 用户名称 | host | 服务器名称 | personal | 个人名字 | adl | 所在来源绕路 |
imap_setflag_full 配置信件标志。 语法: int imap_setflag_full(int imap_stream, string sequence, string flag, int [options]); 返回值: 整数 函数种类: 网络系统 内容说明: 本函数可指定连续信件而配置标志。参数 imap_stream 为 IMAP 的代号。参数 sequence 为特定的部分序号。参数 flag 为欲配置的标志值,包括 Seen、Answered、Flagged、Deleted、Draft 及 Recent。参数 options 可省略,可为 ST_UID。 imap_clearflag_full 清除信件标志。 语法: imap_clearflag_full(int imap_stream, string sequence, string flag, int [options]); 返回值: 无 函数种类: 网络系统 内容说明: 本函数可指定连续信件而清除标志。参数 imap_stream 为 IMAP 的代号。参数 sequence 为特定的部分序号。参数 flag 为欲配置的标志值,包括 Seen、Answered、Flagged、Deleted、Draft 及 Recent。参数 options 可省略,可为 ST_UID。 imap_sort 将信件标头排序。 语法: array imap_sort(int imap_stream, int criteria, int reverse, int [options]); 返回值: 数组 函数种类: 网络系统 内容说明 本函数将信件标头排序。参数 imap_stream 为 IMAP 的代号。参数 criteria 的意义见下表,并只能是下表的其中一项 属性名 | 说明 |
---|
mailbox | 用户名称 | host | 服务器名称 | personal | 个人名字 | adl | 所在来源绕路 |
参数 reverse 值为 0 时表由小到大排序,若值为 1 表由大到小排序。参数 options 可省略,有下列的值: SE_UID 与 SE_NOPREFETCH。 imap_fetchheader 取得原始标头。 语法: string imap_fetchheader(int imap_stream, int msg_no, int [options]); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数将信件标头排序。参数 imap_stream 为 IMAP 的代号。参数 msg_no 为信件序号。参数 options 可省略,其值有下列数种 FT_UID : 信件序号为 UID。 FT_INTERNAL : 返回字符串使用系统格式,不要刻意转成 CRLF 行结束标准。 FT_PREFETCHTEXT : 去掉额外的 RTT。 imap_uid 取得信件 UID。 语法: string imap_uid(string mailbox, int msgno); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数可取得指定信件的 UID。参数 mailbox 为邮箱名。参数 msgno 为信件序号。 imap_getmailboxes 取得全部信件详细信息。 语法: object imap_getmailboxes(int imap_stream, string ref, string pattern); 返回值: 类 函数种类: 网络系统 内容说明: 本函用来检查 IMAP 服务器信件的详细信息。参数 imap_stream 为 IMAP 的代号。参数 ref 通常为 IMAP 服务器名称,如 "{mail.wahaha.com:143}"。参数 pattern 为解析比对字符串的规则。 imap_getsubscribed 列出所有订阅邮箱。 语法: array imap_getsubscribed(int imap_stream, string ref, string pattern); 返回值: 数组 函数种类: 网络系统 内容说明: 本函用来列示出所有订阅 IMAP 服务器信箱 (mailbox)。参数 imap_stream 为 IMAP 的代号。参数 ref 通常为 IMAP 服务器名称,如 "{mail.wahaha.com:143}"。参数 pattern 为解析比对字符串的规则。 imap_msgno 列出 UID 的连续信件。 语法: int imap_msgno(int imap_stream, int uid); 返回值: 整数 函数种类: 网络系统 内容说明: 本函用来列示指定 UID 的连续信件。参数 imap_stream 为 IMAP 的代号。参数 UID 为用户代号。 搜寻指定标准的信件。 语法: array imap_search(int imap_stream, string criteria, int flags); 返回值: 数组 函数种类: 网络系统 内容说明: 本函用来搜寻合乎指定条件的信件。参数 imap_stream 为 IMAP 的代号。参数 criteria 为指定的条件,各字段以空格 (space) 分开,条件见下表。参数 flags 为 SE_UID。 条件 | 说明 |
---|
ALL | 返回所有合乎标准的信件 | ANSWERED | 信件有配置 ANSWERED 标志者 | BCC "字符串" | Bcc 栏中有指定 "字符串" 的信件 | BEFORE "日期" | 指定 "日期" 以前的信件 | BODY "字符串" | 内文字段中有指定 "字符串" 的信件 | CC "字符串" | Cc 栏中有指定 "字符串" 的信件 | DELETED | 合乎已删除的信件 | FLAGGED | 信件有配置 FLAGGED 标志者 | FROM "字符串" | From 栏中有指定 "字符串" 的信件 | KEYWORD "字符串" | 关键字为指定 "字符串" 者 | NEW | 新的信件 | OLD | 旧的信件 | ON "日期" | 指定 "日期" 的信件 | RECENT | 信件有配置 RECENT 标志者 | SEEN | 信件有配置 SEEN 标志者 | SINCE "日期" | 指定 "日期" 之后的信件 | SUBJECT "字符串" | Subject 栏中有指定 "字符串" 的信件 | TEXT "字符串" | Text 栏中有指定 "字符串" 的信件 | TO "字符串" | To 栏中有指定 "字符串" 的信件 | UNANSWERED | 未回应的信件 | UNDELETED | 未删除的信件 | UNFLAGGED | 未配置标志的信件 | UNKEYWORD "字符串" | 未配置关键 "字符串" 的信件 | UNSEEN | 未读取的信件 |
imap_last_error 最后的错误信息。 语法: string imap_last_error(void); 返回值: 字符串 函数种类: 网络系统 内容说明: 本函数用来显示最后出现的 IMAP 错误字符串。本函数不需要使用任何参数。 imap_errors 所有的错误信息。 语法: array imap_errors(void); 返回值: 数组 函数种类: 网络系统 内容说明: 本函数用来显示所有出现的 IMAP 错误字符串。本函数不需要使用任何参数。 imap_alerts 所有的警告信息。 语法: array imap_alerts(void); 返回值: 数组 函数种类: 网络系统 内容说明: 本函数用来显示所有出现的 IMAP 警告字符串。本函数不需要使用任何参数。 imap_status 目前的状态信息。 语法: object imap_status(int imap_stream, string mailbox, int options); 返回值: 类 函数种类: 网络系统 内容说明: 本函数用来显示目前 IMAP 的状态信息。参数 imap_stream 为 IMAP 的代号。参数 mailbox 为指定的邮箱。参数 options 有下面的选择:SA_MESSAGES、SA_RECENT、SA_UNSEEN、SA_UIDNEXT、SA_UIDVALIDITY 与 SA_ALL。 |