PHP基于IMAP收取邮件的方法示例


Posted in PHP onAugust 07, 2017

本文实例讲述了PHP基于IMAP收取邮件的方法。分享给大家供大家参考,具体如下:

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

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

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

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

附上IMAP函数库:

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
基于mysql的论坛(4)
Oct 09 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
php常用字符串比较函数实例汇总
Nov 24 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 #PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 #PHP
php封装的mongodb操作类代码
Aug 06 #PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 #PHP
php mysql数据库操作类(实例讲解)
Aug 06 #PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 #PHP
PHP实现腾讯与百度坐标转换
Aug 05 #PHP
You might like
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
php连接mysql数据库
2017/03/21 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
python学生信息管理系统(初级版)
2018/10/17 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
pycharm永久激活超详细教程
2020/10/29 Python
.NET面试问题集
2015/12/08 面试题
毕业生机械建模求职信
2013/10/14 职场文书
信息工作经验交流材料
2014/05/28 职场文书
班风口号
2014/06/18 职场文书
银行进社区活动总结
2014/07/07 职场文书
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL