\documentclass{article}
\usepackage{ulem}
\usepackage{graphicx}
\usepackage{hyperref}
\pagestyle{headings}
\begin{document}
\part{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.

\section{People}
Michael Slusarz created the library.

\section{Description}
The Socket library, which IMP 5.x uses for IMAP access, supports the following RFCs:

<a href="http://git.horde.org/co.php/framework/Imap\_Client/lib/Horde/Imap/Client/Socket.php?rt=horde-git">http://git.horde.org/co.php/framework/Imap\textbackslash\{\}\_Client/lib/Horde/Imap/Client/Socket.php?rt=horde-git</a>

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+.

\section{Features}
\begin{itemize}
\item Fast. Horde\_Imap\_Client is orders of magnitude faster than the PHP imap extension (benchmarks to come).
\begin{itemize}
\item The PHP imap extension produces tremendously inefficient IMAP queries.  Horde\_Imap\_Client has been ruthlessly tuned to eliminate duplicate/unneeded queries.


\end{itemize}

\item 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.


\item 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.


\item Standards compliant. Horde\_Imap\_Client is strictly RFC compliant.
\begin{itemize}
\item Additionally, Horde\_Imap\_Client implements important core functionality that may not be available on your server.  Threading and \textbf{FULL} sorting (not a limited subset) are always available, regardless of whether your IMAP server supports the THREAD/SORT extensions.


\end{itemize}

\item 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.


\item Easy debugging. Full IMAP logs are available via a single configuration option.


\item Advanced features.
\begin{itemize}
\item Horde\_Imap\_Client is the \textbf{ONLY} open-source PHP library that supports the CONDSTORE <a href="http://tools.ietf.org/html/rfc4551">RFC 4551</a> and QRESYNC <a href="http://tools.ietf.org/html/rfc5162">RFC 5162</a> 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.


\item 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 <a href="http://tools.ietf.org/html/rfc2086">RFC 2086</a> or "new" style ACLs <a href="http://tools.ietf.org/html/rfc4314">RFC 4314</a>.


\item Supports, among others, <a href="http://tools.ietf.org/html/rfc3502">MULTIAPPEND</a>, <a href="http://tools.ietf.org/html/rfc4469">CATENATE</a>, <a href="http://tools.ietf.org/html/rfc4315">UIDPLUS</a>, <a href="http://tools.ietf.org/html/rfc4731">ESEARCH</a>, <a href="http://tools.ietf.org/html/rfc5256">THREAD/SORT</a>, <a href="http://tools.ietf.org/html/rfc5267">ESORT</a>, and <a href="http://tools.ietf.org/html/rfc5819">LIST-STATUS</a> - most of these extensions were specifically designed for <a href="http://tools.ietf.org/html/rfc5550">disconnected clients</a> and vastly reduce the amount of bandwidth and processing need to keep the client synchronized with the server.


\item Horde\_Imap\_Client was <a href="http://lists.andrew.cmu.edu/pipermail/imapproxy-info/2008-October/000771.html">responsible</a> for features added to <a href="http://imapproxy.org/">imapproxy</a> to eliminate the need to re-establish the session every time a user accesses the server.  Horde\_Imap\_Client is the \textbf{ONLY} open-source PHP library that leverages these features.  See <a href="http://lists.horde.org/archives/imp/Week-of-Mon-20110523/052316.html">this message</a> for more details.


\end{itemize}

\end{itemize}
Further details can be found at <a href="http://lists.horde.org/archives/imp/Week-of-Mon-20110523/052285.html">http://lists.horde.org/archives/imp/Week-of-Mon-20110523/052285.html</a>.

\section{Known Broken Imap Servers}
\begin{itemize}
\item Courier (as of, at least, 4.5.0)
\begin{itemize}
\item SORT command on the server is broken - RFC 5256 [3] \textbf{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).


\end{itemize}

\item Cyrus 2.4.14
\begin{itemize}
\item Reported that disabling caching will fix (<a href="http://bugs.horde.org/ticket/11115">Ticket \#11115</a>)


\end{itemize}

\end{itemize}
\section{Resources}
The library code can be found at <a href="http://git.horde.org/horde-git/-/browse/framework/Imap\_Client/">http://git.horde.org/horde-git/-/browse/framework/Imap\textbackslash\{\}\_Client/</a><br />
Developer documentation (API) can be found at <a href="http://dev.horde.org/api/master/lib/Imap\_Client/">http://dev.horde.org/api/master/lib/Imap\textbackslash\{\}\_Client/</a>


\noindent\rule{\textwidth}{1pt}
Back to the <a href="https://wiki.horde.org/Project">Project List</a>

\end{document}
