0

我们可以通过以下方式计算未见消息:

$unreadMessages = $mail->countMessages([Storage::FLAG_UNSEEN]);

如何只迭代那些看不见的消息?当我迭代所有消息(如文档中所示)时,速度非常慢。

foreach ($mail as $messageNum => $message) {
        if ($message->hasFlag(Storage::FLAG_SEEN) && !$message->hasFlag(Storage::FLAG_UNSEEN) && !$message->hasFlag(Storage::FLAG_RECENT)) {
            // echo PHP_EOL . PHP_EOL . "Skipping seen/not-recent e-mail from " . $message->from . PHP_EOL;
            continue;
        }
}

谢谢。

4

1 回答 1

0

当您查看 countMessages() 函数是如何完成的时,您会发现可以使用协议搜索功能。但是协议是私有的。所以你必须扩展类:

class MyImap extends Laminas\Mail\Storage\Imap
{
    public function getProtocol()
    {
        return $this->protocol;
    }
}

$mail = new MyImap(...);

然后你可以用它来快速迭代看不见的消息:

$message_nums = $mail->getProtocol()->search(['UNSEEN']);
foreach ($message_nums as $messageNum) {
        $message = $mail->getMessage($messageNum);
}
于 2020-05-16T06:36:33.860 回答