def handleSave(self, action): statusmessages = IStatusMessage(self.request) PostOnly(self.request) data, errors = self.extractData() if errors: statusmessages.add(_(u"status_parse_error", default="Failed to parse the Form."), type="error") return False portal_transforms = api.portal.get_tool(name='portal_transforms') transformed = portal_transforms.convertTo( 'text/html', data['text'], mimetype='text/restructured', ) portal = api.portal.get() vars = { 'subject': data['subject'], 'body': transformed.getData(), 'site_url': portal.absolute_url(), 'site_title': portal.Title(), } html = Composer().render_template( data["template"], {}, vars, ) portal = api.portal.get() sender_mail = formataddr(( portal.email_from_name, portal.email_from_address, )) mailSVocab = MailSenderVocabulary(self.context) msg = create_email_body( html, headers={"Reply-To": mailSVocab.getTerm(data['reply_to']).title}) if not self.uids: self.uids = data['uids_input'].split(',') mailcount = 0 failed = [] for uid in self.uids: obj = api.content.get(UID=uid) if obj: if IHeldPosition.providedBy(obj): obj = IHeldPosition(obj).get_person() recipient = IRecipientProvider(obj)() if recipient is None: failed.append(safe_unicode(obj.Title())) continue api.portal.send_email(recipient=recipient, sender=sender_mail, subject=data['subject'], body=msg) mailcount += 1 statusmessages.add(_(u"status_mail_send", default="Sent ${number} E-Mails.", mapping={"number": mailcount}), type="info") if failed: statusmessages.add(_( u"status_mails_failed", default="${num} contacts without email-address: ${names}", mapping={ 'num': len(failed), 'names': u','.join(failed) }), type="warning") self.request.response.redirect(self.context.absolute_url())