(PHP Nuke sucks, so we ditched it. I'll make this page suck less later.)

The latest stable version of IMAP Proxy is: 1.2.6, released 28-Jan-2008
The latest development version of IMAP Proxy is: 1.2.7rc1, released 20-Oct-2008
View the ChangeLog for a full list of updates.
NOTE: There is a security bug in all versions of IMAP Proxy prior to 1.2.5rc2 that can be triggered by IMP 4.1.1 or by any host that can connect directly to the proxy. Details are on the security page.

The mailing list can be found here
[Note: The list has moved from lists.pitt.edu to lists.andrew.cmu.edu. Everyone on the old list has been subscribed to the new one. Please update your address books.]

FAQ


What is the imapproxy?

The name says almost all you need to know. It proxies IMAP transactions between an IMAP client and an IMAP server. The general idea is that the client should never know that it's not talking to the real IMAP server. The only thing that makes this a slightly unique Imap Proxy server is that it caches server connections.

[Top]


Why was imapproxy written in the first place?

imapproxy was written to compensate for webmail clients that are unable to maintain persistent connections to an IMAP server. Most webmail clients need to log in to an IMAP server for nearly every single transaction. This behaviour can cause tragic performance problems on the IMAP server. imapproxy tries to deal with this problem by leaving server connections open for a short time after a webmail client logs out. When the webmail client connects again, imapproxy will determine if there's a cached connection available and reuse it if possible.

[Top]


How does imapproxy keep track of which server connection is for which user?

Upon the first successful login to the real IMAP server (through the proxy), imapproxy fills in a little record that contains the username, an md5 digital signature of the password and the server socket descriptor that's being used. After you log out and then log back in again, imapproxy just has to find a record that matches your username and password. These records are stored in a hash table (with the username being the hash key) in memory, so the lookups are pretty fast.

[Top]


I set the cache expiration time for 5 minutes, but looking at my logs I noticed that connections are taking longer than 5 minutes to expire. Is this a bug?

This isn't a bug. Each time a client logs out of imapproxy, the real server connection is left open and the logout time is stored in a record corresponding to the connection. Every 60 seconds, a thread wakes up and expires every connection that's been logged out at least cache_expiration_time seconds. If your cache expiration time is set to 5 minutes, a cached connection could potentially not be expired for nearly 6 minutes.

[Top]


What platforms will imapproxy run on?

So far it's been tested on Solaris 8, Solaris 9, RedHat 7.3, RedHat 9, IRIX 6.5 and FreeBSD 5.0. With some manual tweaking, it's known to run on older versions of FreeBSD and Mac OS X. If you're running it on a platform not listed here, let us know and we'll update this list.

[Top]


Is this the Horde Imap Proxy?

No. You can find information about the Horde Imap Proxy here. This one is the Imap Proxy commonly known as up-imapproxy. They're two totally different Imap Proxy servers. I just shortened the name from up-imapproxy to imapproxy when I registered the domain. I thought www.upimapproxy.org looked pretty stupid.

[Top]


What's up with all the Commodore references throughout the code, and that link to www.commodoreshop.com on your home page?

A couple of the people involved with supporting IMAP Proxy (Dave and Ray) just happen to like Commodore Computers. We have no official affiliation with Commodore International B.V. or their parent company Yeahronimo Media Ventures, Inc. We have received written permission from Yeahronimo to use the Commodore logo on the www.imapproxy.org home page. If you'd like to donate any old Commodore stuff, or if you just want to tell me how cool Commodore Computers are, send an email to davemcmurtrie@hotmail.com.

[Top]


Can IMAP Proxy support multiple backend servers?

The short answer is yes. The long answer is, don't use a screwdriver to hammer in a nail. If you want IMAP Proxy to be able to proxy to multiple backend IMAP servers, you can run multiple instances of IMAP Proxy and make sure each instance is looking at a different configuration file. Before you do this, take a look at perdition which appears to have been designed with this specific task in mind.

[Top]


Will IMAP Proxy allow me to read my email offline?

No.

[Top]


I sent patches and they're not included yet. Are you ever going to include them?

Like most people, I get busy doing stuff. I can't always quantify exactly what that stuff is. Sometimes I'm busy hanging out at the North Park Clubhouse Lounge slugging back Rolling Rocks until I walk funny. Other times I'm busy working. Unless I specifically respond to your patch submission and tell you that I'm not going to include it for some reason, I do actually intend on including your patches in a future release. I'm quite behind on studying and applying patches right now. To anybody that has submitted patches that I have not yet made a part of IMAP Proxy, I really do appreciate your contributions and I apologize for not adding your hard work into this project.

[Top]


Can I use IMAP Proxy with regular IMAP clients or will it just work with WebMail clients?

You should be able to use IMAP Proxy with any IMAP client, however it is really intended to be used with stateless WebMail clients like IMP and SquirrelMail. If you're using something stateful like a real IMAP client, or a stateful WebMail client (Prayer, for example) you probably don't need this IMAP Proxy.

[Top]



Credits
Tons of people contributed to IMAP Proxy to make it the swank piece of software that you know and love. It would be rude of me to take all the credit. These are in no particular order. If you think you deserve thanks and I left you out, I apologize... For everyone listed here, I really appreciate your contributions.

Ben Carter and Shlomo Balass: These guys came up with the idea in the first place. I really had nothing to do with it. I just wrote it.

Ben Carter: Not only did he come up with the idea, he also provided tons of guidance on the overall design. Without his help, this software would be a complete mess and nobody would want to use it. Oh, it was also Ben's idea to include pimpstat (though he can't take credit for the name).

Ray Link: Ray is resposible for the entire imapproxy.org site. He spent countless hours developing the site and he's hosting it for free. Ray looks like a rock star. (Note: The old site looked much slicker, but PHP Nuke sucks. The current design was a "temporary" replacement when we ditched Nuke.)

Ken Murchison: Ken added the STARTTLS support to Imap Proxy. A large amount of code had to be bent to make this work. He did a really nice job -- even kept the margins and comment styles the same. Ken also cleaned up the build process tremendously. Without his help, this thing would be a major pain to compile and it wouldn't support STARTTLS. I promised Ken I'd buy him a beer if he ever came to Pittsburgh.

Dmitry Dolzenko: Gave me free use of a FreeBSD 5.0 box for testing.

John (Don't know the last name, sorry) from techgodz.com: Also gave me free use of a FreeBSD 5.0 box for testing.

Gary Mills: For providing some bugfix patches early in the life of Imap Proxy. Gary also gave me some good suggestions about what options should be included in the config file. Gary was actually the first person (other than us) to use the Imap Proxy.

Devrim Seral: Devrim provided the first autoconf implementation for Imap Proxy.

Didi Rieder: Didi found a few bugs in Imap Proxy for me. He also had some good suggestions for improving things that weren't necessarily bugs, but needed improvement.

Frode Nordahl: Provided the first patch to make Imap Proxy run on Linux. The first version only compiled cleanly on Solaris.

A few random folks that I'll allow to remain nameless: For actually noticing the scads of obscure commodore references throughout the code and documentation.