我需要在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"');
答案 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);
}