Implémentation de l'envoi d'email de réinitialisation de mot de passe (texte du messa...
authorBenoît Pin <benoit.pin@gmail.com>
Wed, 31 Jul 2013 04:46:38 +0000 (06:46 +0200)
committerBenoît Pin <benoit.pin@gmail.com>
Wed, 31 Jul 2013 04:46:38 +0000 (06:46 +0200)
RegistrationTool.py
utils.py

index 953e008..c35cb6a 100644 (file)
@@ -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.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 DateTime import DateTime
 from types import TupleType, ListType
 from uuid import uuid4
+from quopri import encodestring
 
 security = ModuleSecurityInfo('Products.Plinn.RegistrationTool')
 MODE_ANONYMOUS = 'anonymous'
 
 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)
         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')
             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,
             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):
     
     security.declarePrivate('clearExpiredPasswordResetRequests')
     def clearExpiredPasswordResetRequests(self):
index 470b49a..252af4e 100755 (executable)
--- 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 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
 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
 
     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
 def _sudo(func, userid=None) :
     """
     execute func or any callable object