imap_search限制使用$ emails = imap_search($ inbox," SINCE \" $ since_date \"")返回的邮件数量;?

时间:2014-03-24 05:35:38

标签: php cakephp search limit imap

我有 PHP脚本,可以从邮箱中获取邮件。我使用 imap_search 函数:

$emails = imap_search($inbox, "SINCE \"$since_date\"");

我可以将限价应用于imap_search();以上的功能,还可以在$ since_date

中应用小时数

装置 $since_date=24 march 2014 12:33:14这样。

2 个答案:

答案 0 :(得分:1)

由于imap_search只允许您按日期进行搜索,为了进一步缩短时间的结果,您可以循环显示过去2天的电子邮件,检查他们的标题。这是一个例子:

// Get a count of all the emails sent in the last 24hrs 
// (perhaps to see if you've reached your gmail sending limit)

$targetCount = 0;

// Get last 2 days of emails in the SENT box
$date = date("j-M-Y", strtotime("-1 day")); 
$imap = imap_open('{imap.gmail.com:993/imap/ssl}[Gmail]/Sent Mail', 'your-email-address-here', 'your-password-here');
$emails = imap_search($imap, 'SINCE ' . $date);

if($emails) {
    $count = count($emails);

    // Loop through each email and only count those within the 24 hour period
    for($i = 0; $i < $count; $i++){
        $header = imap_header($imap, $emails[$i]);
        // Note: I'm using the package Carbon (to work with dates easier) 
        $date = Carbon::createFromTimeStamp(strtotime(substr($header->date, 0, -6)),'America/Chicago');
        $date->addHours(5); // <-- Adjust for your timezone
        if($date->diffInHours(Carbon::now('America/Chicago'), false) <= 24){
            $targetCount++;
        }
    }
}

imap_close($imap);
echo $targetCount;

我之所以回归2天是因为Gmail的时区可能与您的服务器不同。如果您想避免在额外的一天中进行循环,可以在Gmail的设置中更改您的时区。

答案 1 :(得分:0)

这两个问题的答案都不是,我很害怕。但是,如果您的服务器具有WITHIN extension,则可以按小时搜索。几乎没有任何服务器。