mailbox.mbox not locking mbox properly

John Nagle nagle at
Fri Aug 27 22:09:25 CEST 2010

On 8/10/2010 2:25 AM, Chris Rebert wrote:
> On Tue, Aug 10, 2010 at 2:01 AM,<tinnews at>  wrote:
>> Tim Roberts<timr at>  wrote:
>>> tinnews at wrote:
>>>> I'm using the python mailbox class in a script that processes incoming
>>>> mail and delivers it to various mbox format mailboxes.  It appears
>>>> that, although I am calling the lock method on the destination before
>>>> writing to the mbox and calling unlock afterwards the locking isn't
>>>> working correctly.
>>>> ...
>>>> So it seems that python's mailbox class locking isn't playing nicely
>>>> with mutt's mailbox locking whereas postfix's locking does work
>>>> correctly.
>>> Correct.  The "dest.flush()" method creates a temporary file, copies the
>>> entire modified mailbox into it, removed the original file, and renames the
>>> temp file into place.
>> Yes, I just took a look at the code and it does exactly
>> that which of course screws up just about any normal MUA looking at
>> the mbox.  Grrrrrr!
>>> The Postfix MDA, like most MDAs, just opens the existing file and appends
>>> the new data to it.
>>>> Has anyone seen this problem before, and/or do I need to anything more
>>>> than the following for the locking to work correctly:-
>>> It's not the locking.  It's the flush mechanism.  The mbox class doesn't
>>> know that the ONLY thing you did was an append.  You might have modified
>>> other messages in the middle.  If you want to do an append, you'll need to
>>> write your own subclass of mbox.
>> OK, thanks.  In reality I can probably just use straightforward file
>> reading and writing as the *only* thing I will ever be doing is to
>> append a message to a mailbox file.
>> I think there should be a big warning in the mailbox documentation to
>> this effect as doing it the way that Python's mailbox class does it
>> will break all sorts of things.  There should maybe be a specific
>> 'append' method.
> File a documentation and/or library bug:
> Cheers,
> Chris

More information about the Python-list mailing list