james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joachim Draeger (JIRA)" <server-...@james.apache.org>
Subject [jira] Commented: (JAMES-502) IMAP support
Date Mon, 12 Jun 2006 23:23:36 GMT
    [ http://issues.apache.org/jira/browse/JAMES-502?page=comments#action_12415934 ] 

Joachim Draeger commented on JAMES-502:


Hi everybody,

after a lot of javamaildir and JavaMailStoreMailRepository i found some time for IMAP again.

To safely share the JavaMail Store between MailRepository and possibly multiple instances
of IMAP i wrote a StoreGateKeeper in additional to the FolderGateKeeper to care for caching
and opening/closing Folders.
It looks a bit complicated because everything goes through a few wrappers but it makes it
possible to keep parts separated.
The reason is that javamaildir allows access by multiple threads but not at multiple instances
of one Folder. Additionally a Folder has to be closed after a session to write Flags.
To say it again: There is no strong dependency to JavaMail Store or javamaildir. 
I've implemented two existing interfaces: ImapMailbox and ImapHost.

This time I followed a bit the TDD and exploratory testing. It really sucks to always build
a jar launch James start Thunderbird and search through the logs until you find an exception
or the right debug message. 
After writing a few very simple stubs/mocks I could start the server directly through a static
void main! (see test org.apache.james.imapserver.util.ImapServerLauncher) Just create a tcp
directory  choose run from eclipse and have fun. Or just run it in the debugger. The traffic
gets logged into tcp.

In org.apache.james.imapserver.handler.session.SessionTest I'm just using a ByteArrayStream
pair and process it via ImapRequestHandler.handleRequest();
Using debugger is very useful here too.

I preferred first writing my own tests (exploratory) in favor of the existing original ones.
But now I understand them much better and I'm sure many of them could be reanimated.

For two reasons I decided to setup a public svn repository.
1. Putting out a "release" takes much time, even it is only a probosal.
2. I hope more people will join now

But of course I would like to see Imap server playing in the james sandbox soon.  :-)


It contains the latest (my) versions of javamaildir, javamailstore-mailrepository and imap.
The latest versions of all three are needed at the moment. But they should be easy to build.
Just download a few libs and use ant. Or just make a few clicks in sure IDE and wire the source
folders together.
I had to block the directories including mixed licensed jars for known reasons.
javamaildir just needs junit,activation and javamail. 
javamailstore-mailrepository is well documentated. :-)
imap needs log4j, junit, jmock 1.1.0RC1, commons-io and many jars from the james lib directory.
I hope to have a convenient build like in javamailstore-mailrepositroy soon. 
Please ask if you have any questions.

To get startet in IMAP I found this document very useful: 
(with highlighted important parts and comments)

At the moment I will concentrate on Thunderbird 1.5 as client.
For a reference it is quite helpful to watch "real life" imap sessions with a packet sniffer
like ethereal. As a reference server I prefer courier. If you don't have access to a suitable
account I could create one for you at my server.

The next tasks will be:

1. creating a build script
2. reanimate existing tests
3. maybe some fancy UML
4. bringing more commands to life
5. think of a James Imap compatible MessageRepository

I'm looking forward for your input and questions! :-) 


> IMAP support
> ------------
>          Key: JAMES-502
>          URL: http://issues.apache.org/jira/browse/JAMES-502
>      Project: James
>         Type: New Feature

>   Components: IMAPServer
>     Reporter: Stefano Bagnara
>      Fix For: 3.0
>  Attachments: james-imap2-proposal-extended1.zip, james-imap2-proposal.zip
> James needs a working IMAP implementations. This is just a container for the IMAP efforts
and updates.
> Many times in the list people ask the current status, the missing steps, and more. We
should add subtasks to this issue to clear up things.
> If you're willing to help with IMAP support for James please read mailing list archives
and this issue history and discuss in the list what you're willing to do.
> I (Stefano) will be happy to help for everything related the James/Avalon integration
and the correct service interactions, but I don't know anything about the IMAP protocol itself.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org

View raw message