.. contents:: Contents .. section-numbering:: =========================== 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. -------- People -------- Michael Slusarz created the library. ------------- Description ------------- The Socket library, which IMP 5.x uses for IMAP access, supports the following RFCs: http://git.horde.org/co.php/framework/Imap_Client/lib/Horde/Imap/Client/Socket.php?rt=horde-git 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+. ---------- Features ---------- * 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. .. _`RFC 4551`: http://tools.ietf.org/html/rfc4551 .. _`RFC 5162`: http://tools.ietf.org/html/rfc5162 .. _`RFC 2086`: http://tools.ietf.org/html/rfc2086 .. _`RFC 4314`: http://tools.ietf.org/html/rfc4314 .. _`MULTIAPPEND`: http://tools.ietf.org/html/rfc3502 .. _`CATENATE`: http://tools.ietf.org/html/rfc4469 .. _`UIDPLUS`: http://tools.ietf.org/html/rfc4315 .. _`ESEARCH`: http://tools.ietf.org/html/rfc4731 .. _`THREAD/SORT`: http://tools.ietf.org/html/rfc5256 .. _`ESORT`: http://tools.ietf.org/html/rfc5267 .. _`LIST-STATUS`: http://tools.ietf.org/html/rfc5819 .. _`disconnected clients`: http://tools.ietf.org/html/rfc5550 .. _`responsible`: http://lists.andrew.cmu.edu/pipermail/imapproxy-info/2008-October/000771.html .. _`imapproxy`: http://imapproxy.org/ .. _`this message`: http://lists.horde.org/archives/imp/Week-of-Mon-20110523/052316.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 * Reported that disabling caching will fix (`Ticket #11115`_) .. _`Ticket #11115`: http://bugs.horde.org/ticket/11115 ----------- Resources ----------- 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`_ .. _`Project List`: https://wiki.horde.org/Project?referrer=Project%2FHordeImapLib