diff --git a/product/ERP5/Document/MailMessage.py b/product/ERP5/Document/MailMessage.py
index b29641415dc4b32e6e516995af8ee07d6bdb4a3f..b78cca3a89b0066eb0953f240dc380deee23afbc 100755
--- a/product/ERP5/Document/MailMessage.py
+++ b/product/ERP5/Document/MailMessage.py
@@ -1,7 +1,8 @@
 ##############################################################################
 #
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
-#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
+# Copyright (c) 2002-2006 Nexedi SARL and Contributors. All Rights Reserved.
+#                         Jean-Paul Smets-Solanes <jp@nexedi.com>
+#                         Kevin Deldycke          <kevin@nexedi.com>
 #
 # WARNING: This program as such is intended to be used by professional
 # programmers who take the whole responsability of assessing all potential
@@ -39,79 +40,102 @@ import smtplib
 
 from zLOG import LOG
 
+# API of base64 has changed between python v2.3 and v2.4
+import base64
+global supported_encoding
+supported_encoding = {}
+try:
+  # python v2.4 API
+  supported_encoding = { 'base64': base64.b64decode
+                       , 'base32': base64.b32decode
+                       , 'base16': base64.b16decode
+                       }
+except AttributeError:
+  # python v2.3 API
+  supported_encoding = { 'base64': base64.decodestring
+                       }
+
+
 class MailMessage(XMLObject, Event, CMFMailInMessage):
+  """
+    MailMessage subclasses Event objects to implement Email Events.
+  """
+
+  meta_type = 'ERP5 Mail Message'
+  portal_type = 'Mail Message'
+  add_permission = Permissions.AddPortalContent
+  isPortalContent = 1
+  isRADContent = 1
+
+  # Declarative security
+  security = ClassSecurityInfo()
+  security.declareObjectProtected(Permissions.AccessContentsInformation)
+
+  # Declarative properties
+  property_sheets = ( PropertySheet.Base
+                    , PropertySheet.XMLObject
+                    , PropertySheet.DublinCore
+                    , PropertySheet.Task
+                    , PropertySheet.Arrow
+                    , PropertySheet.MailMessage
+                    )
+
+  def __init__(self, *args, **kw):
+    XMLObject.__init__(self, *args, **kw)
+    self.attachments = attachments
+
+  def _edit(self, *args, **kw):
+    # LOG('MailMessage._edit', 0, str(kw))
+    self._cleanIncomingMessage(**kw)
+    XMLObject._edit(self, *args, **kw)
+    self.attachments = attachments
+
+  def _cleanIncomingMessage(**kw):
+    # Delete attachments
+    attachments = kw.get('attachments', {})
+    if kw.has_key('attachments'):
+      del kw['attachments']
+    # Decode MIME base64/32/16 data
+    if kw.has_key('header') and kw['header'].has_key('content-transfer-encoding'):
+      content_encoding = kw['header']['content-transfer-encoding']
+      if content_encoding in supported_encoding.keys():
+        method = supported_encoding[content_encoding]
+        kw['body'] = method(kw['body'])
+        del kw['header']['content-transfer-encoding']
+
+  def send(self, from_url=None, to_url=None, msg=None, subject=None):
     """
-      MailMessage subclasses Event objects to implement Email Events.
+      Sends a reply to this mail message.
     """
+    # We assume by default that we are replying to the sender
+    if from_url == None:
+      from_url = self.getUrlString()
+    if to_url == None:
+      to_url = self.getSender()
+    if msg is not None and subject is not None:
+      header = "From: %s\n" % from_url
+      header += "To: %s\n\n" % to_url
+      header += "Subject: %s\n" % subject
+      header += "\n"
+      msg = header + msg
+      self.MailHost.send( msg )
 
-    meta_type = 'ERP5 Mail Message'
-    portal_type = 'Mail Message'
-    add_permission = Permissions.AddPortalContent
-    isPortalContent = 1
-    isRADContent = 1
-
-    # Declarative security
-    security = ClassSecurityInfo()
-    security.declareObjectProtected(Permissions.AccessContentsInformation)
-
-    # Declarative properties
-    property_sheets = ( PropertySheet.Base
-                      , PropertySheet.XMLObject
-                      , PropertySheet.DublinCore
-                      , PropertySheet.Task
-                      , PropertySheet.Arrow
-                      , PropertySheet.MailMessage
-                      )
-
-    def __init__(self, *args, **kw):
-      attachments = kw.get('attachments', {})
-      if kw.has_key('attachments'):
-        del kw['attachments']
-      XMLObject.__init__(self, *args, **kw)
-      self.attachments = attachments
-
-    def _edit(self, *args, **kw):
-      LOG('MailMessage._edit', 0, str(kw))
-      attachments = kw.get('attachments', {})
-      if kw.has_key('attachments'):
-        del kw['attachments']
-      XMLObject._edit(self, *args, **kw)
-      self.attachments = attachments
-
-    def send(self, from_url=None, to_url=None, msg=None, subject=None):
-      """
-      Sends a reply to this mail message.
-      """
-      # We assume by default that we are replying to the sender
-      if from_url == None:
-        from_url = self.getUrlString()
-      if to_url == None:
-        to_url = self.getSender()
-      if msg is not None and subject is not None:
-        header = "From: %s\n" % from_url
-        header += "To: %s\n\n" % to_url
-        header += "Subject: %s\n" % subject
-        header += "\n"
-        msg = header + msg
-        self.MailHost.send( msg )
-
-    def getReplyBody(self):
-      """
+  def getReplyBody(self):
+    """
       This is used in order to respond to a mail,
       this put a '> ' before each line of the body
-      """
-      reply_body = ''
-      if type(self.body) is type('a'):
-        reply_body = '> ' + self.body.replace('\n','\n> ')
-      return reply_body
-
-    def getReplySubject(self):
-      """
+    """
+    reply_body = ''
+    if type(self.body) is type('a'):
+      reply_body = '> ' + self.body.replace('\n','\n> ')
+    return reply_body
+
+  def getReplySubject(self):
+    """
       This is used in order to respond to a mail,
       this put a 'Re: ' before the orignal subject
-      """
-      reply_subject = self.getTitle()
-      if reply_subject.find('Re: ')!=0:
-        reply_subject = 'Re: ' + reply_subject
-      return reply_subject
-  
+    """
+    reply_subject = self.getTitle()
+    if reply_subject.find('Re: ')!=0:
+      reply_subject = 'Re: ' + reply_subject
+    return reply_subject