The date format for e.g. SINCE is, according to rfc3501:
date = date-text / DQUOTE date-text DQUOTE
date-day = 1*2DIGIT
; Day of month
date-day-fixed = (SP DIGIT) / 2DIGIT
; Fixed-format version of date-day
date-month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" /
"Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
date-text = date-day "-" date-month "-" date-year
So a valid date is e.g. "22-Jul-2012" with or without the double quotes.
imap_search
(PHP 4, PHP 5)
imap_search — Liefert ein Array von Nachrichten die den gegebenen Suchkriterien entsprechen
Beschreibung
$imap_stream
, string $criteria
[, int $options = SE_FREE
[, string $charset = NIL
]] )imap_search() durchsucht die Nachrichten des aktuellen Postfachs.
Der Suchstring um zB nach allen unbeantworteten Nachrichten von Mutter zu suchen wäre "UNANSWERED FROM Mutter". Die Suche untercheidet nicht nach Groß- und Kleinschreibung. Die folgende Liste von Suchkriterien wurde aus dem Sourcecode des UW c-client erstellt, sie ist daher nicht unbedingt vollständig oder in allen Einzelheiten korrekt (siehe auch » RFC2060, Abschnitt 6.4.4).
Parameter-Liste
-
imap_stream -
Eine von imap_open() zurückgegebene IMAP-Verbindung.
-
criteria -
Ein aus mit Leerzeichen getrennten Schlüsselworten und Argumenten. Argumente die selbt Leerzeichen enthalten müssen in doppelte Anführungszeichen gefasst werden (z.B. FROM "Hans Müller"). Es existieren folgende Schlüsselworte:
- ALL - return all messages matching the rest of the criteria
- ANSWERED - die gesuchten Nachrichten wurden beantwortet
- BCC "text" - die gesuchten Nachrichten enthalten "text" im Bcc: Feld
- BEFORE "datum" - die gesuchten Nachrichten wurden vor "datum" gesendet
- BODY "text" - der Nachrichtenkörper enthält "text"
- CC "text" - die gesuchten Nachrichten enthalten "text" im Cc: Feld
- DELETED - die gesuchten Nachrichten sind zur Löschung vorgemerkt
- FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set
- FROM "text" - sucht Nachrichten mit "text" im Absender (From:)
- KEYWORD "text" - sucht Nachrichten mit Schlüsselwort "text"
- NEW - die gesuchten Nachrichten sind neu
- OLD - die gesuchten Nachrichten sind nicht neu
- ON "datum" - die Nachrichten wurden am angegebenen "datum" gesendet
- RECENT - sucht Nachrichten deren \\RECENT Flag nocht gesetzt ist
- SEEN - sucht bereits gelesene Nachrichten (das \\SEEN Flag ist gesetzt)
- SINCE "datum" - sucht nach "datum" gesendete Nachrichten
- SUBJECT "text" - sucht Nachrichten mit "text" in der Betreffzeile
- TEXT "text" - sucht Nachrichten deren Text "text" enthält
- TO "text" - sucht Nachrichten mit "text" im Empfänger (To:)
- UNANSWERED - sucht noch nicht beantwortete Nachrichten
- UNDELETED - sucht nicht zum Löschen vorgemerkte Nachrichten
- UNFLAGGED - sucht Nachrichten die nicht als wichtig markiert sind
- UNKEYWORD "text" - sucht Nachrichten in deren Schlüsselwörtern "text" nicht enthalten ist
- UNSEEN - sucht ungelesene Nachrichten
-
options -
Der Parameter
optionskann aufSE_UIDgesetzt werden um UIDs statt Nachrichtennummern zurückzuerhalten. -
charset -
Rückgabewerte
Liefert ein Array mit Nachrichtennummern oder UIDs.
Wenn die Suchkriterien keinen Sinn ergaben oder
keine Nachrichten gefunden wurden wird FALSE
zurückgegeben.
Changelog
| Version | Beschreibung |
|---|---|
| 4.3.3 |
Der Parameter charset wurde hinzugefügt
|
I haven't found any documentation of the allowed date formats, but (for example) "14 May 2012" works.
// Find UIDs of messages within the past week
$date = date ( "d M Y", strToTime ( "-7 days" ) );
$uids = imap_search ( $mbox, "SINCE \"$date\"", SE_UID );
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".
It's not possible to find strings containing double quotes using this function.
For example, if you got a message named : Hello, this is "Bob"
You can try :
imap_search($inbox, 'SUBJECT "Hello, this is "Bob""')
Or
imap_search($inbox, "SUBJECT 'Hello, this is \"Bob\"'")
But both are false, because you did not escape double quotes in the first case, and you can NOT use simple quotes in the imap_search criteria in the second case.
The real problem is that you cannot use simple quotes to surround your criteria in the 2nd argument of imap_search, after SUBJECT.
To set your own CHARSET, which is useful if you are dealing with Chinese Japanese and Korean queries.
<?php imap_search($inbox,'BODY "'.$keyword.'"', SE_FREE, "UTF-8"); ?>
imap_search() always returns false when op_silent flag is set in the connection parameters.
This search looks for messages matching ALL criteria, not ANY criteria. For example the search
imap_search($mailbox,'FROM "user" TO "user"')
Will return message that have "user" in both the from and to headers, but not messages with "user" in either the from or to header.
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";
