Re: question about the best way to check if an email is valid (RFC compliant)

xavier delannoy <[email protected]> Wed, 6 Jul 2011 15:58:22 +0200
Newsgroups gmane.comp.python.mime.devel
Message-ID <[email protected]>
--------------000403090309000904000302
Content-Type: text/plain; charset="ISO-8859-1"; format=flowed
Content-Transfer-Encoding: 7bit

On 07/06/2011 02:08 PM, R. David Murray wrote:
> On Wed, 06 Jul 2011 11:53:43 +0200, xavier delannoy<[email protected]>  wrote:
>> I use the python email library for an Automation Test Framework. The
>> framework test a Mail Transfert Agent. I notice that the "email" library
>> silently fix a lot of MIME errors. I can understand this behaviour, but
>> I need to validate that the email sent by the MTA are correct.
>> I wonder if there's a way to use the python MIME Parser more
>> "aggressively" (without modifying the email) and raise and exception as
>> soon as an error is detected.
>>
>> Here's my needs and an extract of my python:
>
> Not at the moment.  You can check the defects attribute afterward to
> see if there were any detected errors, though.
>
> In email6 (planned for python 3.3) we will be providing a facility for
> doing the raise immediately.  I don't know what you mean by leave
> the message unmodified, though, since the input string is already
> unmodified, and you won't get a message object when an error is raised.
>

If an error is raised, and if I won't get a message object, then I'm
fine. But with Python 2.7.1, I get a message object and the attribute
defects is empty.

In the attachment you will find:
   - orig.eml : an email with an error. The boundary
"000101020201080900040301" isn't closed
   - after_parsing.eml: same email after calling email.message_from_file()
The boundary is now closed. And the defects attribute is empty
   - test.py: python script to reproduce.

-- Xavier


> --David


--------------000403090309000904000302
Content-Type: application/x-compressed-tar; name="sample.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="sample.tgz"

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
AgICAgKPhD8A8l4jhgBQAAA=
--------------000403090309000904000302
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline