james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin.Bergljung" <Martin.Berglj...@opsera.com>
Subject IMAP Protocol implementation comments
Date Fri, 01 May 2009 09:29:19 GMT


First, thanks for all the work that has been done to develop a new IMAP
protocol implementation.


I am developing an IMAP Mailbox Manager backed by Alfresco and has been
using the old IMAP implementation since 2008-01. Last month I have
upgraded the implementation to use the new IMAP Protocol implementation.
It has been successful and I have done extensive testing with MS Outlook
2007 and Mozilla Thunderbird 2.0. Will do more testing with Lotus Notes
8 in the coming weeks.


I have some comments though, about the new implementation:


*         The new change to include the username in the MailboxSession
is a good idea. Unfortunately I still have to prepend the username to
all mailboxnames (e.g. #mail.mbergljung.INBOX/Company Home) in the
MailboxManager.resolve method as not all methods in the MailboxManager
takes the MailboxSession parameter. I then use the mailboxname to
extract username in all MailboxManager methods to get to a Person object
with more info. A couple of reasons why I need to access the username in
all methods are:

o   I need to check user permissions for the particular operation (i.e.
does user have permission to create mailbox, does user have permission
to update flag etc)

o   I need to get to an Alfresco Person object with more user
information such as Home folder, Locale etc 

o   I need the username for logging

*         I have to change hierarchy delimiter from '.' to '/' in
MailboxManager, LSubProcessor, and ListProcessor. Would be good if there
was a way for me to just tell the IMAP layer that I would like to use
the '/' as delimiter. I know that each command response usually contains
the hierarchy delimiter that is to be assumed but it does not cover the
complete IMAP implementation.

*         The EXPUNGE command does not work correctly:

o   The EXPUNGE can be executed and the server side will physically
delete all emails marked for deletion

o   However, whatever is sent back to the client is not correct as it
does not remove the emails from the UI (used to work fine in old

o   If I click on other mailbox and then back on mailbox that had emails
expunged they are gone (so a workaround exists for the moment)

*         The SELECT command is too chatty at the moment I think. I get
loads of calls to MailboxManager for the Mailbox just to put together a
SELECT response.

o   The Mailbox object is requested several times (4) when it should
only be requested once and then you could get the values needed for the




Martin Bergljung


  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message