带有多个正文关键字的IMAP_SEARCH

时间:2018-04-30 10:31:14

标签: php imap

我一直在网上寻找并且没有找到另一个完全像这样的问题。我想要的是搜索邮箱以查找包含X关键字的所有电子邮件。关键字的数量是动态的,并不需要全部。例如,我想用收件箱搜索收件箱:PHP和JAVA。这意味着我的理想结果是它返回的电子邮件至少包含2个关键字中的1个。现在我可以搜索身体,但我只能传递1个参数。当我添加另一个时,似乎需要两者。

以下是一些代码:

$queryString = 'BODY "php" BODY "java"';


private function connectSmtp()
{
    $this->connection = imap_open(
        '{'.$this->credentials['smtp'].'/'.$this->credentials['encryption'].'}/'.$this->credentials['mailbox'],
        $this->credentials['user'],
        $this->credentials['password']
    );
}

private function readMailbox($queryString)
{
    $in = [];
    $totalMessages = \imap_num_msg($this->connection);//Used for something else

    $sorted = imap_search($this->connection, $queryString);

    for($i = 0; $i <= (count($sorted ) - 1); $i++) {
        $in[] = array(
            'index'     => $i,
            'header'    => \imap_headerinfo($this->connection, $sorted[$i]),
            'body'      => \imap_body($this->connection, $sorted[$i]),
            'structure' => \imap_fetchstructure($this->connection, $sorted[$i]),
            'mailnumber' => $sorted[$i]
        );
    }
    return $in;
}

然而,这总共返回了220封电子邮件,但是当我搜索只有PHP时,我得到35000(这是正确的),当我搜索JAVA时,我得到3000。

如何解决此问题,以便我收到至少包含1个关键字的所有电子邮件,并且不要求所有关键字都在电子邮件中?

我也试过用: $queryString = 'OR BODY "php" BODY "java" '; 这会给我返回false。

0 个答案:

没有答案