Commit 65dea6ad authored by Kevin Deldycke's avatar Kevin Deldycke

Support of Base64 encoded-bodies with extra support of Base32 and Base16 if python 2.4 is present.

Update indention.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@5948 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 740d21c6
############################################################################## ##############################################################################
# #
# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. # Copyright (c) 2002-2006 Nexedi SARL and Contributors. All Rights Reserved.
# Jean-Paul Smets-Solanes <jp@nexedi.com> # Jean-Paul Smets-Solanes <jp@nexedi.com>
# Kevin Deldycke <kevin@nexedi.com>
# #
# WARNING: This program as such is intended to be used by professional # WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential # programmers who take the whole responsability of assessing all potential
...@@ -39,79 +40,102 @@ import smtplib ...@@ -39,79 +40,102 @@ import smtplib
from zLOG import LOG 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): 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' def getReplyBody(self):
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):
"""
This is used in order to respond to a mail, This is used in order to respond to a mail,
this put a '> ' before each line of the body this put a '> ' before each line of the body
""" """
reply_body = '' reply_body = ''
if type(self.body) is type('a'): if type(self.body) is type('a'):
reply_body = '> ' + self.body.replace('\n','\n> ') reply_body = '> ' + self.body.replace('\n','\n> ')
return reply_body return reply_body
def getReplySubject(self): def getReplySubject(self):
""" """
This is used in order to respond to a mail, This is used in order to respond to a mail,
this put a 'Re: ' before the orignal subject this put a 'Re: ' before the orignal subject
""" """
reply_subject = self.getTitle() reply_subject = self.getTitle()
if reply_subject.find('Re: ')!=0: if reply_subject.find('Re: ')!=0:
reply_subject = 'Re: ' + reply_subject reply_subject = 'Re: ' + reply_subject
return reply_subject return reply_subject
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment