CRLF handling in the rfc822 module

Nikolaus Schulz microschulz at
Sun May 21 02:20:42 CEST 2006


while playing with the rfc822 module and imaplib, I've found the
following weird behaviour.  Quickstart: rfc822.Message(fp) instantiates
a rfc822.Message object from a file object fp.  The docs for the rfc822
module say here: 

    Input lines as read from the file may either be terminated by CR-LF or
    by a single linefeed; a terminating CR-LF is replaced by a single
    linefeed before the line is stored.

    I've tested that with a message read from an IMAP server and a
locally generated message; since I'm running Linux, the local one has LF
line terminators, while the IMAP message uses CRLF.  

    The following code snippet demonstrates that these two cases yield
different line terminators in the resulting rfc822.Message object.


import imaplib
import rfc822

# Assignments omitted
# imap_server = 
# imap_username = 
# imap_password = 
# imap_folder = 

def print_header(msg_str):
    import cStringIO
    msg = rfc822.Message(cStringIO.StringIO(msg_str))
    print repr(msg.headers[1])
    print repr(msg.getrawheader('Envelope-to'))
    print repr(msg.getheader('Envelope-to'))

imap_srv = imaplib.IMAP4_SSL(imap_server)
imap_srv.login(imap_username, imap_password)
result, response = imap_srv.fetch(1, '(RFC822)')

local_msg = """\
Return-path: gargravarr at
Envelope-to: nikolaus at localhost
Delivery-date: Fri, 12 May 2006 05:37:22 +0200
Message-ID: <12345 at>
Date: Thu, 11 May 2006 20:30:44 -0700
From: Grargravarr <gargravarr at>
To: Nikolaus Schulz <spam_me at spam.bin>
Subject: Bogus CRLF handling in Python
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Dummy mail body. 
# EO: demo

Running the demo script gives this: 

'Envelope-to: nikolaus at localhost\r\n'
' nikolaus at localhost\r\n'
'nikolaus at localhost'
'Envelope-to: nikolaus at localhost\n'
' nikolaus at localhost\n'
'nikolaus at localhost'

Isn't that inconsistent?  Have I hit a bug?
Please enlighten me!

Have a nice day,

More information about the Python-list mailing list