imap_search

(PHP 3 >= 3.0.12, PHP 4, PHP 5)

imap_search --  This function returns an array of messages matching the given search criteria

Description

array imap_search ( resource imap_stream, string criteria [, int options [, string charset]] )

This function performs a search on the mailbox currently opened in the given imap stream. criteria is a string, delimited by spaces, in which the following keywords are allowed. Any multi-word arguments (e.g. FROM "joey smith") must be quoted.

  • ALL - return all messages matching the rest of the criteria

  • ANSWERED - match messages with the \\ANSWERED flag set

  • BCC "string" - match messages with "string" in the Bcc: field

  • BEFORE "date" - match messages with Date: before "date"

  • BODY "string" - match messages with "string" in the body of the message

  • CC "string" - match messages with "string" in the Cc: field

  • DELETED - match deleted messages

  • FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set

  • FROM "string" - match messages with "string" in the From: field

  • KEYWORD "string" - match messages with "string" as a keyword

  • NEW - match new messages

  • OLD - match old messages

  • ON "date" - match messages with Date: matching "date"

  • RECENT - match messages with the \\RECENT flag set

  • SEEN - match messages that have been read (the \\SEEN flag is set)

  • SINCE "date" - match messages with Date: after "date"

  • SUBJECT "string" - match messages with "string" in the Subject:

  • TEXT "string" - match messages with text "string"

  • TO "string" - match messages with "string" in the To:

  • UNANSWERED - match messages that have not been answered

  • UNDELETED - match messages that are not deleted

  • UNFLAGGED - match messages that are not flagged

  • UNKEYWORD "string" - match messages that do not have the keyword "string"

  • UNSEEN - match messages which have not been read yet

For example, to match all unanswered messages sent by Mom, you'd use: "UNANSWERED FROM mom". Searches appear to be case insensitive. This list of criteria is from a reading of the UW c-client source code and may be incomplete or inaccurate (see also RFC2060, section 6.4.4).

Valid values for flags are SE_UID, which causes the returned array to contain UIDs instead of messages sequence numbers.

Parameter charset was added in PHP 4.3.3.


add a note add a note User Contributed Notes
lots2learn at gmail dot com
05-Mar-2005 03:22
if no mails match the criteria , imap_search returns an empty array..but the count is still 1...so check for false return status  and not for zero count .
David Koopman
16-Oct-2004 06:35
imap_search fails when I am trying to include an escaped double quote in my search string.  For example:

...
$search = 'David \"the bull\" Koopman';
$search = "BODY \"$search\"";
$result = imap_search($conn, $search, SE_UID);

Results in FALSE, the imap search command is never executed.  I turned on tcpdump and watched the traffic from my server, the SEARCH command is never run.  Remove the double quotes and the command is executed.  I have tried double escaping, still doesn't work.  I am going to report this as a bug.

Raw telnet command works fine:
00000005 UID SEARCH BODY "David \"the bull\" Koopman"
* SEARCH 1773
00000005 OK SEARCH done.
oliver at samera dot com dot py
26-Oct-2002 11:16
imap_search() only supports IMAP2 search criterias, because the function mail_criteria() (from c-client lib) is used in ext/imap/php_imap.c for parsing the search string.
IMAP2 search criteria is defined in RFC 1176, section "tag SEARCH search_criteria".
oliver at samera dot com dot py
27-Jan-2002 01:03
imap_search() return false if it does not understand the search condition or no messages have been found.

$emails imap_seach($mbox, "UNDELETED SENTSINCE 01-Jan-2002");
if($emails === false)
  echo "The search failed";
kkkd at 371 dot net
15-Oct-2001 09:19
imap_search($mbox,$wide." "."\"$key\"");
but don't work when $wide=="BODY";
use $wide="BODY" then display all mail
hxlvt at hotmail dot com
11-Oct-2001 03:29
I was wondering if imap_seach() can handle multiple search strings, and tried this to match both subject and to field:
$bounce = imap_search($new, 'TO "'.$listName.'" SUBJECT "'.$subject.'"', SE_UID);
 
Seems it works.
eric at ohmforce dot com
15-Mar-2001 08:32
[Editor: restoring note removed by mistake]

Answering to the guys up,
                         I guess it's due to the '. The variables between simple quotes are
                         not parsed.

                         This is why you use the escape characters.

                         Bonjour chez vous :)

                         c*
ommadawn at club-internet dot fr
27-Jul-2000 05:37
It works... Try this (Php 4)
$TresGentil = Imap_Search($MailBox,'BODY "Bonjour"', SE_UID);

$LastWeekMsg = Imap_Search($MailBox,'SINCE "Fri, 21 Jul 2000"', SE_UID); etc...