From 63f5e85cdbd05ac9a00a6dab60548c226981fb62 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Benoi=CC=82t=20Pin?= Date: Wed, 31 Jul 2013 06:46:38 +0200 Subject: [PATCH 1/1] =?utf8?q?Impl=C3=A9mentation=20de=20l'envoi=20d'email?= =?utf8?q?=20de=20r=C3=A9initialisation=20de=20mot=20de=20passe=20(texte?= =?utf8?q?=20du=20message=20ultra-minimaliste=20pour=20l'instant).?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- RegistrationTool.py | 26 +++++++++++++++++++++----- utils.py | 6 ++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/RegistrationTool.py b/RegistrationTool.py index 953e008..c35cb6a 100644 --- a/RegistrationTool.py +++ b/RegistrationTool.py @@ -36,9 +36,11 @@ from Products.CMFCore.utils import getToolByName from Products.CMFCore.utils import getUtilityByInterfaceName from Products.GroupUserFolder.GroupsToolPermissions import ManageGroups from Products.Plinn.utils import Message as _ +from Products.Plinn.utils import encodeQuopriEmail from DateTime import DateTime from types import TupleType, ListType from uuid import uuid4 +from quopri import encodestring security = ModuleSecurityInfo('Products.Plinn.RegistrationTool') MODE_ANONYMOUS = 'anonymous' @@ -200,13 +202,27 @@ class RegistrationTool(BaseRegistrationTool) : if member : uuid = str(uuid4()) self._passwordResetRequests[uuid] = (userid, DateTime() + 1) - mailhost = getUtilityByInterfaceName('Products.MailHost.interfaces.IMailHost') - ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool') utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool') - sender = ptool.getProperty('email_from_address') - to = member.getProperty('email') + ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool') + # fuck : mailhost récupéré avec getUtilityByInterfaceName n'est pas correctement + # wrappé. Un « unrestrictedTraverse » ne marche pas. + # mailhost = getUtilityByInterfaceName('Products.MailHost.interfaces.IMailHost') + portal = utool.getPortalObject() + mailhost = portal.MailHost + sender = encodeQuopriEmail(ptool.getProperty('email_from_name'), ptool.getProperty('email_from_address')) + to = encodeQuopriEmail(member.getMemberFullName(nameBefore=0), member.getProperty('email')) + subject = "=?utf-8?q?%s?=" % encodestring('Password reset') + lines = [] + pr = lines.append + pr('%s/password_reset_form/%s' % (utool(), uuid)) + body = '\n'.join(lines) message = self.echange_mail_template(From=sender, - To=to) + To=to, + Subject=subject, + ContentType = 'text/plain', + charset = 'UTF-8', + body=body) + mailhost.send(message) security.declarePrivate('clearExpiredPasswordResetRequests') def clearExpiredPasswordResetRequests(self): diff --git a/utils.py b/utils.py index 470b49a..252af4e 100755 --- a/utils.py +++ b/utils.py @@ -27,6 +27,7 @@ import re from types import StringType from random import randrange from Acquisition import aq_base +from quopri import encodestring from AccessControl.PermissionRole import rolesForPermissionOn from AccessControl import ModuleSecurityInfo from AccessControl import getSecurityManager @@ -251,6 +252,11 @@ def getAdapterByInterface(ob, dotted_name, default=_marker) : else : return default +def encodeQuopriEmail(name, email) : + qpName = encodestring(name).replace('=\n', '') + return '''"=?utf-8?q?%s?=" <%s>''' % (qpName, email) + + def _sudo(func, userid=None) : """ execute func or any callable object -- 2.20.1