在使用imap读取邮件的时候,为了避免一次读取的全量的邮件,肯定需要用到imap_search,但这个imap_search用起来感觉并不像文档里展示的那么好用,我在使用SUBJECT搜索以及其它时间过滤时感觉过滤参数不起作用似的,反正我尝试通过SUBJECT搜索数字字符串未过滤成功,调试多次最终通过FROM和since来达到过滤目标邮件的作用。

    实际imap_search功能挺多,但可能它的设计并不是按照中国人的使用习惯来的。比如since时间格式,看起来就很陌生。如下是通过FROM+SINCE条件来过滤邮件。

#imap_search通过FROM+SINCE条件来过滤邮件。
$since = date("D, d M Y");
$emails = imap_search($inbox, 'FROM "test@04007.cn" SINCE "'.$since.' 00:00:00"');

    上面的邮件过滤表示过滤发件邮箱是test@04007.cn且收到的时间从今天0时起的所有邮件。SUBJECT我没有搜索成功,不过我估计是编码转换的问题,我也没有去再尝试,基本上面的这两个条件能满足很多地方的需要。

    除了imap_search之外,之前有篇文章也提过我找到了这个imap_mime_header_decode方法,能把邮件的标题解码出来,不过这两天在使用的时候发现它会自动截断标题,我原来没调试还怀疑是它对中文标题支持不够友好。输出调试后发现它会把文件名截断到几个stdClass Object中,但不知道为什么要这样做,毕竟这个标题并不长。这些我也没再去追究了,了解它的这个特点,然后在取标题的时候循环取一下text,不过建议不要用中文附件标题,phpspreadsheet在导入EXCEL中文名称附件时会稍麻烦。imap_mime_header_decode示例如下:

#将邮件标签进行解码输出
$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
        )

)
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!