Last Modified 2014-11-27 by Jan Schneider

Horde IMAP Client library

This library presents a fully abstracted interface to an IMAP server. It provides a native-PHP driver that is significantly faster, more feature-rich, and extensible as opposed to PHP's imap (c-client) extension.

Additionally, the library allows for abstracted access to POP3 servers via a native-PHP driver.

C-client drivers for both IMAP and POP3 are also provided as proof-of-concept.


Michael Slusarz created the library.


The Socket library, which IMP 5.x uses for IMAP access, supports the following RFCs:


Additionally, the class includes a UTF-8 to UTF7-IMAP converter, an IMAP mailbox sorter, and an abstracted caching library.

The library requires PHP 5.2.0+.


  • Fast. Horde_Imap_Client is orders of magnitude faster than the PHP imap extension (benchmarks to come).
    • The PHP imap extension produces tremendously inefficient IMAP queries. Horde_Imap_Client has been ruthlessly tuned to eliminate duplicate/unneeded queries.
  • Memory efficient. Horde_Imap_Client handles message data (which can easily be 10+ MB) entirely within PHP temporary streams. No more than 2 MB of a large data objects is stored in memory at any time.
  • Built-in caching. No need to muck around with caching message data; this is all handled internally. Further, Horde_Imap_Client uses Horde_Cache which means that a large variety of caching options are available to use - anything from temporary files, SQL databases, to memcache servers can be used to cache this data.
  • Standards compliant. Horde_Imap_Client is strictly RFC compliant.
    • Additionally, Horde_Imap_Client implements important core functionality that may not be available on your server. Threading and FULL sorting (not a limited subset) are always available, regardless of whether your IMAP server supports the THREAD/SORT extensions.
  • Liberally commented code. It may not be perfect. But at least we try to give you some idea of what's going on in there.
  • Easy debugging. Full IMAP logs are available via a single configuration option.
  • Advanced features.
    • Horde_Imap_Client is the ONLY open-source PHP library that supports the CONDSTORE RFC 4551 and QRESYNC RFC 5162 IMAP extensions. These extensions ensure that changes made by other mail user agents (MUAs) are automatically synchronized. Without CONDSTORE, it is IMPOSSIBLE to cache flag information so loading a mailbox on every page load requires parsing every message for flag changes. Additionally, these extensions are absolutely essential to correctly implement an AJAX mail interface that properly synchronizes changes.
    • Full ACL support, and provides abstracted management of the ACLs so that a developer does not need to worry whether the server supports "old" style ACLs RFC 2086 or "new" style ACLs RFC 4314.
    • Supports, among others, MULTIAPPEND, CATENATE, UIDPLUS, ESEARCH, THREAD/SORT, ESORT, and LIST-STATUS - most of these extensions were specifically designed for disconnected clients and vastly reduce the amount of bandwidth and processing need to keep the client synchronized with the server.
    • Horde_Imap_Client was responsible for features added to imapproxy to eliminate the need to re-establish the session every time a user accesses the server. Horde_Imap_Client is the ONLY open-source PHP library that leverages these features. See this message for more details.

Further details can be found at http://lists.horde.org/archives/imp/Week-of-Mon-20110523/052285.html.

Known Broken Imap Servers

  • Courier (as of, at least, 4.5.0)
    • SORT command on the server is broken - RFC 5256 [3] REQUIRES UTF-8 support, but Courier does not allow UTF-8 searches. Disabling the SORT capability on these servers is required (see imp/config/backends.php: capability_ignore option).
  • Cyrus 2.4.14


The library code can be found at http://git.horde.org/horde-git/-/browse/framework/Imap_Client/
Developer documentation (API) can be found at http://dev.horde.org/api/master/lib/Imap_Client/

Back to the Project List