[Zope-dev] MailHost Improvements

Alec Mitchell apm13 at columbia.edu
Wed Aug 12 19:03:23 EDT 2009


Hello,

I've been working on making Plone use the standard Zope MailHost  in place  
of the custom Products.SecureMailHost we've been using since Plone 2.1  
(See: http://dev.plone.org/plone/ticket/8814).  During this process I've  
run into a couple bugs in the MailHost implementation and I believe it is  
missing some essential functionality.

The most significant issue is that if you call send() with a messageText  
containing just the message body, and that body has a ':' in it (e.g. a  
url) the body will be treated as a header and you'll send a nonsense  
message.  The current implementation of send() also puts a fairly large  
burden on developers who want to generate simple, correctly encoded  
messages.  Finally, send() relies heavily on the long deprecated 'rfc822'  
and 'mimetools' modules which have been removed from Python 3.0.

I've attached a patch that updates MailHost to use the 'email' module for  
parsing and generating messages.  In addition to fixing the issues that I  
ran across, and maintaining compatibility, it provides a number of new  
features:

* send and sendTemplate accept an optional charset argument.  Using this  
will set the content-type charset, as well as trigger appropriate encoding  
if needed.

* send and sendTemplate accept an optional msg_type argument which will  
set the content type header for the message.

* The messageText, mfrom, mto, and subject arguments may now be unicode or  
encoded non-ascii strings, provided a charset is given.  Any unicode input  
will be automatically encoded to the provided charset (or the default  
charset).  Headers will be further encoded in compliance with rfc2822.   
The message body will be further encoded using a transfer encoding  
determined by the email.Charset registry (e.g. 7bit for us-ascii,  
quoted-printable for utf-8 and iso8859, base64 for most other encodings).

* The messageText argument now accepts email.Message.Message objects  
directly.

I'm attaching a patch that includes these changes as well as tests for all  
new functionality.  I hope to integrate these changes into Zope 2.12  
before final release, but would like to hear the opinions of Zope  
developers before committing.  Though these are fairly significant  
changes, I believe they provide very useful functionality as well as at  
least one critical fix, while maintaining 100% compatibility.

Thanks,
Alec
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mailhost.patch
Type: application/octet-stream
Size: 20986 bytes
Desc: not available
Url : http://mail.zope.org/pipermail/zope-dev/attachments/20090812/b336d845/attachment-0001.obj 


More information about the Zope-Dev mailing list