Log message for revision 78994: Ship MailHost with our own TLS/SSL-aware SMTPMailer
Changed: U Zope/trunk/lib/python/Products/MailHost/MailHost.py A Zope/trunk/lib/python/Products/MailHost/mailer.py -=- Modified: Zope/trunk/lib/python/Products/MailHost/MailHost.py =================================================================== --- Zope/trunk/lib/python/Products/MailHost/MailHost.py 2007-08-19 14:51:00 UTC (rev 78993) +++ Zope/trunk/lib/python/Products/MailHost/MailHost.py 2007-08-19 15:07:33 UTC (rev 78994) @@ -33,7 +33,6 @@ from DateTime import DateTime from zope.interface import implements -from zope.sendmail.mailer import SMTPMailer from zope.sendmail.maildir import Maildir from zope.sendmail.delivery import DirectMailDelivery, QueuedMailDelivery, \ QueueProcessorThread @@ -41,6 +40,11 @@ from interfaces import IMailHost from decorator import synchronized +# Use our own TLS/SSL-aware mailer since the zope.sendmail does +# not support TLS/SSL in this version (should be replaced with +# the next version) +from mailer import SMTPMailer + queue_threads = {} # maps MailHost path -> queue processor threada LOG = logging.getLogger('MailHost') Added: Zope/trunk/lib/python/Products/MailHost/mailer.py =================================================================== --- Zope/trunk/lib/python/Products/MailHost/mailer.py (rev 0) +++ Zope/trunk/lib/python/Products/MailHost/mailer.py 2007-08-19 15:07:33 UTC (rev 78994) @@ -0,0 +1,72 @@ +############################################################################## +# +# Copyright (c) 2003 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## + +""" +SMTPMailer with TLS/SSL support +(original code taken from zope.sendmail) + +$Id: mailer.py 78981 2007-08-19 06:38:48Z andreasjung $ +""" +__docformat__ = 'restructuredtext' + +import socket +from smtplib import SMTP + +from zope.interface import implements +from zope.sendmail.interfaces import ISMTPMailer + +have_ssl = hasattr(socket, 'ssl') + +class SMTPMailer(object): + + implements(ISMTPMailer) + + smtp = SMTP + + def __init__(self, hostname='localhost', port=25, + username=None, password=None, no_tls=False, force_tls=False): + self.hostname = hostname + self.port = port + self.username = username + self.password = password + self.force_tls = force_tls + self.no_tls = no_tls + + def send(self, fromaddr, toaddrs, message): + connection = self.smtp(self.hostname, str(self.port)) + + # send EHLO + code, response = connection.ehlo() + if code < 200 or code >300: + raise RuntimeError('Error sending EHLO to the SMTP server ' + '(code=%s, response=%s)' % (code, response)) + + # encryption support + have_tls = connection.has_extn('starttls') + if not have_tls and self.force_tls: + raise RuntimeError('TLS is not available but TLS is required') + + if have_tls and have_ssl and not self.no_tls: + connection.starttls() + connection.ehlo() + + if connection.does_esmtp: + if self.username is not None and self.password is not None: + connection.login(self.username, self.password) + elif self.username: + raise RuntimeError('Mailhost does not support ESMTP but a username ' + 'is configured') + + connection.sendmail(fromaddr, toaddrs, message) + connection.quit() _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins