Maison  >  Article  >  php教程  >  PHP使用IMAP收取邮件

PHP使用IMAP收取邮件

WBOY
WBOYoriginal
2016-06-06 09:52:191607parcourir

因需要处理公司企业邮箱被退信邮件问题:刚开始的思路是通过模拟登陆,对邮件进行抓取,(这种事情对我来说,做过了很多次,轻车熟路),不过邮箱还是有点复杂的,

后来想起做邮件发送时有用到smtp来发送邮件,记得也可以收取邮件,在腾讯企业邮箱帮助http://service.exmail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1000584

看到IMAP和POP都可以实现收取邮件,再发现PHP有内置的IMOP函数,写了示例:

 


<span style="color: #008000;">//</span><span style="color: #008000;">以腾讯企业邮箱做了测试</span><span style="color: #800080;"><br>$mailServer</span>="imap.exmail.qq.com"; <span style="color: #008000;">//</span><span style="color: #008000;">IMAP主机</span><span style="color: #008000;"><br></span><br><span style="color: #800080;">$mailLink</span>="{{<span style="color: #800080;">$mailServer</span>}:143}INBOX" ; <span style="color: #008000;">//</span><span style="color: #008000;">imagp连接地址:不同主机地址不同</span><span style="color: #008000;"><br></span><br><span style="color: #800080;">$mailUser</span> = '***'; <span style="color: #008000;">//</span><span style="color: #008000;">邮箱用户名</span><span style="color: #008000;"><br></span><br><span style="color: #800080;">$mailPass</span> = '***'; <span style="color: #008000;">//</span><span style="color: #008000;">邮箱密码</span><span style="color: #008000;"><br></span><br><span style="color: #800080;">$mbox</span> = <span style="color: #008080;">imap_open</span>(<span style="color: #800080;">$mailLink</span>,<span style="color: #800080;">$mailUser</span>,<span style="color: #800080;">$mailPass</span>); <span style="color: #008000;">//</span><span style="color: #008000;">开启信箱imap_open</span><span style="color: #008000;"><br></span><br><span style="color: #800080;">$totalrows</span> = <span style="color: #008080;">imap_num_msg</span>(<span style="color: #800080;">$mbox</span>); <span style="color: #008000;">//</span><span style="color: #008000;">取得信件数</span><span style="color: #008000;"><br></span><br><span style="color: #0000ff;">for</span> (<span style="color: #800080;">$i</span>=1;<span style="color: #800080;">$i</span>$totalrows;<span style="color: #800080;">$i</span>++){<br><br>    <span style="color: #800080;">$headers</span> = <span style="color: #008080;">imap_fetchheader</span>(<span style="color: #800080;">$mbox</span>, <span style="color: #800080;">$i</span>); <span style="color: #008000;">//</span><span style="color: #008000;">获取信件标头</span><span style="color: #008000;"><br></span><br>    <span style="color: #800080;">$headArr</span> = matchMailHead(<span style="color: #800080;">$headers</span>); <span style="color: #008000;">//</span><span style="color: #008000;">匹配信件标头</span><span style="color: #008000;"><br></span><br>    <span style="color: #800080;">$mailBody</span> = <span style="color: #008080;">imap_fetchbody</span>(<span style="color: #800080;">$mbox</span>, <span style="color: #800080;">$i</span>, 1); <span style="color: #008000;">//</span><span style="color: #008000;">获取信件正文</span><span style="color: #008000;"><br></span><br>}<br><br><span style="color: #008000;">/*</span><span style="color: #008000;">*<br> * <br> * 匹配提取信件头部信息<br> * @param String $str<br> </span><span style="color: #008000;">*/</span><br><span style="color: #0000ff;">function</span> matchMailHead(<span style="color: #800080;">$str</span>){<br>    <span style="color: #800080;">$headList</span> = <span style="color: #0000ff;">array</span>();<br>    <span style="color: #800080;">$headArr</span> = <span style="color: #0000ff;">array</span>(<br>        'from',<br>        'to',<br>        'date',<br>        'subject'<br>    );<br><br>    <span style="color: #0000ff;">foreach</span> (<span style="color: #800080;">$headArr</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$key</span>){<br>        <span style="color: #0000ff;">if</span>(<span style="color: #008080;">preg_match</span>('/'.<span style="color: #800080;">$key</span>.':(.*?)[\n\r]/is', <span style="color: #800080;">$str</span>,<span style="color: #800080;">$m</span>)){<br>            <span style="color: #800080;">$match</span> = <span style="color: #008080;">trim</span>(<span style="color: #800080;">$m</span>[1]);<br>            <span style="color: #800080;">$headList</span>[<span style="color: #800080;">$key</span>] = <span style="color: #800080;">$key</span>=='date'?<span style="color: #008080;">date</span>('Y-m-d H:i:s',<span style="color: #008080;">strtotime</span>(<span style="color: #800080;">$match</span>)):<span style="color: #800080;">$match</span>;<br>        }<br>    }<br>    <span style="color: #0000ff;">return</span> <span style="color: #800080;">$headList</span>;<br>}

附上IMAP函数库:

<span style="color: #008080;">imap_append</span>:    附加字符串到指定的邮箱中。<br><span style="color: #008080;">imap_base64</span>:    解 BASE64 编码。<br><span style="color: #008080;">imap_body</span>:    读信的内文。<br><span style="color: #008080;">imap_check</span>:    返回邮箱信息。<br><span style="color: #008080;">imap_close</span>:    关闭 IMAP 链接。<br><span style="color: #008080;">imap_createmailbox</span>:    建立新的信箱。<br><span style="color: #008080;">imap_delete</span>:    标记欲删除邮件。<br><span style="color: #008080;">imap_deletemailbox</span>:    删除既有信箱。<br><span style="color: #008080;">imap_expunge</span>:    删除已标记的邮件。<br><span style="color: #008080;">imap_fetchbody</span>:    从信件内文取出指定部分。<br><span style="color: #008080;">imap_fetchstructure</span>:    获取某信件的结构信息。<br><span style="color: #008080;">imap_header</span>:    获取某信件的标头信息。<br><span style="color: #008080;">imap_headers</span>:    获取全部信件的标头信息。<br><span style="color: #008080;">imap_listmailbox</span>:    获取邮箱列示。<br><span style="color: #008080;">imap_listsubscribed</span>:    获取订阅邮箱列示。<br><span style="color: #008080;">imap_mail_copy</span>:    复制指定信件到它处邮箱。<br><span style="color: #008080;">imap_mail_move</span>:    移动指定信件到它处邮箱。<br><span style="color: #008080;">imap_num_msg</span>:    取得信件数。<br><span style="color: #008080;">imap_num_recent</span>:    取得新进信件数。<br><span style="color: #008080;">imap_open</span>:    打开 IMAP 链接。<br><span style="color: #008080;">imap_ping</span>:    检查 IMAP 是否连接。<br><span style="color: #008080;">imap_renamemailbox</span>:    更改邮箱名字。<br><span style="color: #008080;">imap_reopen</span>:    重开 IMAP 链接。<br><span style="color: #008080;">imap_subscribe</span>:    订阅邮箱。<br><span style="color: #008080;">imap_undelete</span>:    取消删除邮件标记。<br><span style="color: #008080;">imap_unsubscribe</span>:    取消订阅邮箱。<br><span style="color: #008080;">imap_qprint</span>:    将 qp 编码转成八位。<br><span style="color: #008080;">imap_8bit</span>:    将八位转成 qp 编码。<br><span style="color: #008080;">imap_binary</span>:    将八位转成 base64 编码。<br><span style="color: #008080;">imap_scanmailbox</span>:    寻找信件有无特定字符串。<br><span style="color: #008080;">imap_mailboxmsginfo</span>:    取得目前邮箱的信息。<br><span style="color: #008080;">imap_rfc822_write_address</span>:    电子邮件位址标准化。<br><span style="color: #008080;">imap_rfc822_parse_adrlist</span>:    解析电子邮件位址。<br><span style="color: #008080;">imap_setflag_full</span>:    配置信件标志。<br><span style="color: #008080;">imap_clearflag_full</span>:    清除信件标志。<br><span style="color: #008080;">imap_sort</span>:    将信件标头排序。<br><span style="color: #008080;">imap_fetchheader</span>:    取得原始标头。<br><span style="color: #008080;">imap_uid</span>:    取得信件 UID。<br><span style="color: #008080;">imap_getmailboxes</span>:    取得全部信件详细信息。<br><span style="color: #008080;">imap_getsubscribed</span>:    列出所有订阅邮箱。<br><span style="color: #008080;">imap_msgno</span>:    列出 UID 的连续信件。<br><span style="color: #008080;">imap_search</span>:    搜寻指定标准的信件。<br><span style="color: #008080;">imap_last_error</span>:    最后的错误信息。<br><span style="color: #008080;">imap_errors</span>:    所有的错误信息。<br><span style="color: #008080;">imap_alerts</span>:    所有的警告信息。<br><span style="color: #008080;">imap_status</span>:    目前的状态信息。




Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn