smtplib sends blank message if the message contain certain characters

The problem is that smtplib is not putting a blank line between the message header and the message body as shown by in the “Show Original” form of my test:

Return-Path: <[email protected]>
Received: **REDACTED**
        Fri, 03 Aug 2012 06:56:20 -0700 (PDT)
Message-ID: <[email protected]>
Date: Fri, 03 Aug 2012 06:56:20 -0700 (PDT)
From: [email protected]
http: //www.example.com

Although this is a legal mail header, Mail Transfer Agents and Mail User Agents should ignore apparent header fields they don’t understand. And because the RFC822 header continues until the first blank line and http: looks like a header line, it is parsed as if it were a header. If given a newline:

mensaje="\nhttp://www.example.com"

Then it works as expected. Although email technically only needs the “envelope” as provided by smtplib the contents of the mail should be more complete if you expect your recipients (and their mailers) to treat the message nicely, you should probably use the email module to generate the body.

added

Based on the doctest in smtplib.py it looks as if this is an intentional feature allowing the caller of sendmail() to append to the header:

     >>> msg = '''\\
     ... From: [email protected]
     ... Subject: testin'...
     ...
     ... This is a test '''
     >>> s.sendmail("[email protected]", tolist, msg)

Where the From: and Subject: lines are part of the “nice” headers I mentioned above.

Leave a Comment