我一直在网上寻找并且没有找到另一个完全像这样的问题。我想要的是搜索邮箱以查找包含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。