X-Git-Url: https://scm.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/3c4367d8e03450e9a73e61f4247145d2b6c86a33..959d888c17d1403d2eeecc19bc4b5e2c8d1debf6:/Products/Plinn/skins/control/send_email.py diff --git a/Products/Plinn/skins/control/send_email.py b/Products/Plinn/skins/control/send_email.py new file mode 100644 index 0000000..93c573f --- /dev/null +++ b/Products/Plinn/skins/control/send_email.py @@ -0,0 +1,81 @@ +##parameters= other_adr=[], batchM=[], customized_batch={}, expand='', collapse='', subject='', text_body='', wfid=None, send_fields={}, ajax='' +recipients = {'to':[], 'cc':[], 'bcc':[]} +if expand or collapse : + if expand : + expand = expand.keys()[0] + return context.send_email_form(other_adr=other_adr, expand=expand, + batchM=batchM, customized_batch=customized_batch, + subject=subject, text_body=text_body, + send_fields=send_fields) +if batchM : + rolesAndMembers = dict(context.getRecipients()) + for role in batchM : + field = send_fields[role] + recipients[field].extend( [m.id for m in rolesAndMembers[role]] ) + +for role, b in customized_batch.items() : + field = send_fields[role] + recipients[field].extend( b ) + + +other_adr = filter(None, other_adr) +if not (reduce(lambda a, b : a+b, recipients.values()) or other_adr) : + context.setStatus(False, 'No email sent : no recipient specified.') + return context.setRedirect(context, 'object/view') + +portal = context.portal_url.getPortalObject() +mtool = portal.portal_membership +MailHost = portal.MailHost + +from quopri import encodestring + +def encodeAdr(member) : + name = member.getMemberFullName(nameBefore=0) + email = member.getProperty('email') + qpName = encodestring(name).replace('=\n', '') + return '''"=?utf-8?q?%s?=" <%s>''' % (qpName, email) + +sender = mtool.getAuthenticatedMember() +sender = encodeAdr(sender) + + +recipientsFormated = {'to':'', 'cc':'', 'bcc':''} +for field, b in recipients.items() : + formated = map(encodeAdr, mtool.getMembers(b)) + formated = filter(None, formated) + formated = ', '.join(formated) + recipientsFormated[field] = formated + +if other_adr : + recipients['to'].extend(other_adr) + formated = ', '.join(other_adr) + to = ', '.join([recipientsFormated['to'], formated]) + to = to.strip(', ') + recipientsFormated['to'] = to + +recipientsHeader = [] +for field in ['to', 'cc', 'bcc'] : + value = recipientsFormated[field] + if value : + recipientsHeader.append('%s: %s' % (field.capitalize(), value)) + +recipientsHeader = '\n'.join(recipientsHeader) + +message = context.echange_mail_template( From = sender + , recipients = recipientsHeader + , Subject = "=?utf-8?q?%s?=" % encodestring(subject).replace('=\n', '') + , ContentType = 'text/plain' + , charset = 'UTF-8' + , body=text_body) + +MailHost.send( message.encode('utf-8') ) + +if wfid is not None : + wtool = portal.portal_workflow + email_sent = reduce(lambda a, b : a+b, recipients.values()) + wtool.doActionFor(context, 'send_email', wf_id=wfid, + email_sent=email_sent, + comment=text_body) + +context.setStatus(True, 'Email sent.') +return context.setRedirect(context, 'object/view', ajax=ajax) \ No newline at end of file