在使用imap读取邮件的时候,为了避免一次读取的全量的邮件,肯定需要用到imap_search,但这个imap_search用起来感觉并不像文档里展示的那么好用,我在使用SUBJECT搜索以及其它时间过滤时感觉过滤参数不起作用似的,反正我尝试通过SUBJECT搜索数字字符串未过滤成功,调试多次最终通过FROM和since来达到过滤目标邮件的作用。本文地址:http://www.04007.cn/article/812.html,未经许可,不得转载.
实际imap_search功能挺多,但可能它的设计并不是按照中国人的使用习惯来的。比如since时间格式,看起来就很陌生。如下是通过FROM+SINCE条件来过滤邮件。本文地址:http://www.04007.cn/article/812.html,未经许可,不得转载.
#imap_search通过FROM+SINCE条件来过滤邮件。 $since = date("D, d M Y"); $emails = imap_search($inbox, 'FROM "test@04007.cn" SINCE "'.$since.' 00:00:00"');本文地址:http://www.04007.cn/article/812.html,未经许可,不得转载.
上面的邮件过滤表示过滤发件邮箱是test@04007.cn且收到的时间从今天0时起的所有邮件。SUBJECT我没有搜索成功,不过我估计是编码转换的问题,我也没有去再尝试,基本上面的这两个条件能满足很多地方的需要。本文地址:http://www.04007.cn/article/812.html,未经许可,不得转载.
除了imap_search之外,之前有篇文章也提过我找到了这个imap_mime_header_decode方法,能把邮件的标题解码出来,不过这两天在使用的时候发现它会自动截断标题,我原来没调试还怀疑是它对中文标题支持不够友好。输出调试后发现它会把文件名截断到几个stdClass Object中,但不知道为什么要这样做,毕竟这个标题并不长。这些我也没再去追究了,了解它的这个特点,然后在取标题的时候循环取一下text,不过建议不要用中文附件标题,phpspreadsheet在导入EXCEL中文名称附件时会稍麻烦。imap_mime_header_decode示例如下:本文地址:http://www.04007.cn/article/812.html,未经许可,不得转载.
#将邮件标签进行解码输出 $nameArr = imap_mime_header_decode($filename); print_r($nameArr); #输出内容 Array ( [0] => stdClass Object ( [charset] => UTF-8 [text] => 这只是一封测 ) [1] => stdClass Object ( [charset] => UTF-8 [text] => 试邮件 20 ) [2] => stdClass Object ( [charset] => UTF-8 [text] => 20-05-24.xlsx ) )本文地址:http://www.04007.cn/article/812.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/812.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |