How can I use the Conditional OR to search emails with imap_search - PHP IMAP library

后端 未结 2 1747
醉酒成梦
醉酒成梦 2021-01-24 00:06

I need to use an OR statement in an imap_search() command.

I found that a condition OR is not supported in this library. Imap_search Bug Report Link There has to be a w

相关标签:
2条回答
  • 2021-01-24 00:08

    Your SEARCH syntax is wrong, as the operators are prefix and not infix. The correct search string should be 'SINCE "08-Mar-2011" OR BODY "bobby" OR BODY "robert" BODY "bob"'.

    But if PHP simply doesn't support OR in imap_search -- and your link indicates that they don't, despite c-client support for it for almost 10 years -- then you'll have to do the conditional OR in your application. Run

    $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"');
    

    and then merge the three result sets.

    0 讨论(0)
  • 2021-01-24 00:20

    or use instead an array_merge to join the results in a single array:

    //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); 
    
    }
    
    0 讨论(0)
提交回复
热议问题