如何使用条件OR来搜索带有imap_search的电子邮件 - PHP IMAP库

时间:2011-03-10 05:16:12

标签: php email imap

我需要在imap_search()命令中使用OR语句。

我发现此库中不支持条件OR。 Imap_search Bug Report Link必须有一种方法可以使用条件OR搜索电子邮件,我该怎么做呢?我不知道我从哪里开始。

我希望能够做到:

$boxes = imap_search($connection,'SINCE "08-Mar-2011" AND (BODY "bobby" OR BODY "robert" OR BODY "bob"');

2 个答案:

答案 0 :(得分:5)

您的SEARCH语法错误,因为运算符是前缀而不是中缀。正确的搜索字符串应为'SINCE "08-Mar-2011" OR BODY "bobby" OR BODY "robert" BODY "bob"'

但是如果PHP根本不支持OR中的imap_search - 并且您的链接表明它们没有,尽管c-client支持它近10年 - 那么你'我必须在您的应用程序中执行条件OR。运行

$box_bobby  = imap_search($connection, 'SINCE "08-Mar-2011" BODY "bobby"');
$box_robert = imap_search($connection, 'SINCE "08-Mar-2011" BODY "robert"');
$box_bob    = imap_search($connection, 'SINCE "08-Mar-2011" BODY "bob"');

然后合并三个结果集。

答案 1 :(得分:1)

或使用array_merge将结果连接到单个数组中:

//search codes: 1 -> FROM, 2 -> SUBJECT
array_push($filtri, array(1,"no-reply@accounts.google.com"));
array_push($filtri, array(1,"Tophost"));
array_push($filtri, array(2,"promemoria"));

$yesterday = date("Y-m-d", strtotime ("-1 days"));

foreach($filtri as $filtro){
    if ($filtro[0] == 1) $addFiltri = ' FROM "'.$filtro[1].'" ';
    if ($filtro[0] == 2) $addFiltri = ' SUBJECT "'.$filtro[1].'" ';
    $temp = imap_search($inbox,'SINCE "'.$yesterday.'" '.$addFiltri);
    $emails = array_merge($emails , $temp); 

}