{"id":68,"date":"2004-01-27T12:09:08","date_gmt":"2004-01-27T18:09:08","guid":{"rendered":"http:\/\/www.mooreds.com\/wordpress\/?p=68"},"modified":"2004-01-27T12:09:08","modified_gmt":"2004-01-27T18:09:08","slug":"imap-proxy-and-horde","status":"publish","type":"post","link":"https:\/\/www.mooreds.com\/wordpress\/archives\/68","title":{"rendered":"imap proxy and horde"},"content":{"rendered":"<p>I&#8217;m implementing an intranet using the <a href='http:\/\/www.horde.org'>Horde<\/a> suite of tools.  This is written in <a href='http:\/\/www.php.net'>PHP<\/a>, and provides an amazing amount of out of the box, easily configured functionality.  The most robust pieces are the <a href='http:\/\/www.horde.org\/imp'>mail client<\/a> (incidentally, used by <a href='http:\/\/www.westhost.com'>WestHost<\/a> for webmail, and <a href='http:\/\/www.horde.org\/papers\/Scalable_webmail_HOWTO.php'>very scalable<\/a>), the <a href='http:\/\/www.horde.org\/kronolith'>calendar<\/a>, and the <a href='http:\/\/www.horde.org\/turba'>address book<\/a>.  There are a ton of other <a href='http:\/\/www.horde.org\/projects.php'>projects<\/a> using the Horde framework, but most of them are in beta, and haven&#8217;t been officially released. Apparently these applications are pretty solid (at least, that&#8217;s what I get from reading the mail list) but I wanted to shy away from unreleased code.  I am, however, anxiously awaiting the day that the new version is ready; as you can see from the <a href='http:\/\/webmail.demo.hub.org\/'>demo site<\/a> that it&#8217;s pretty sharp.<\/p>\n<p>Anyway, I was very happy with the Horde framework.  The only issue I had was that the mail application was very slow.  I was connecting to a remote imap server, and PHP has no way to cache imap connections. Also, for some reason, the mail application reconnects to the imap server <a href='http:\/\/lists.horde.org\/archives\/imp\/Week-of-Mon-20030505\/032607.html'>every time<\/a>.  However, someone on that same thread suggested using <a href='http:\/\/www.imapproxy.com'>UP IMAP Proxy<\/a>.  This very slick C program was simple to compile and install on a BSD box, and sped up the connections noticeably.  For instance, the authentication to the imap server (the only part of the application that I instrumented) went from 10 milliseconds to 1.  It apparently caches the user name and password (as an MD5 hash) and only communicates with the imap server when it doesn&#8217;t have the information needed (for example, when you first visit, or when you&#8217;re requesting messages from your inbox).  It does have some security concerns (look <a href='http:\/\/www.mit.edu\/afs\/net\/reference\/source\/up-imapproxy-1.2\/'>here<\/a> and search for P_NEWLOG), but you can handle these at the network level. All in all, I&#8217;m very impressed with UP IMAP Proxy.<\/p>\n<p>And, for that matter, I&#8217;m happy with Horde.  I ended up having to write a small horde module, and while the framework doesn&#8217;t give you some things that I&#8217;m used to in the java world (no database pooling, no MVC pattern) it does give you a lot of other stuff (an object architecture to follow, single sign-on, logging).  And I&#8217;m not aware of any framework in the java world that comes with so many applications ready to roll out.  It&#8217;s all <a href='http:\/\/www.gnu.org\/copyleft\/lesser.html'>LGPL<\/a> and, as I implied above, the released modules have a very coherent structure that makes it easy to add and subtract needed functionality.<\/p>\n<p>Bravo Horde developers!  Bravo imap proxy maintainer!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m implementing an intranet using the Horde suite of tools. This is written in PHP, and provides an amazing amount of out of the box, easily configured functionality. The most [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":0,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}