Я искал в Интернете и не нашел другой вопрос точно так же, как этот. Я хочу найти почтовый ящик, чтобы найти все электронные письма, содержащие ключевые слова X. Количество ключевых слов является динамическим, и оно не нуждается во всех из них. Например, я хочу найти входящие по ключевым словам: PHP и JAVA. Это означает, что мой идеальный результат заключается в том, что он возвращает электронные письма, по крайней мере, с одним из двух ключевых слов. Сейчас я могу искать тело, но могу передать только 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" ';
Это возвращает мне ложь.