def send_email(self, REQUEST): """ Send e-mail """ keys = ('to', 'cc', 'subject', 'message') formerrors = {} if REQUEST.REQUEST_METHOD == 'POST': formdata = dict((key, REQUEST.form.get(key, '')) for key in keys) email_tool = self.getEmailTool() acl_tool = self.getAuthenticationTool() emails_to = [] emails_cc = [] to = formdata['to'] cc = formdata['cc'] message = formdata['message'] if not to: formerrors['to'] = 'At least one recipinet is needed' if not formdata['subject']: formerrors['subject'] = 'Email subject is mandatory' if not message: formerrors['message'] = 'Message body is mandatory' if not formerrors: for item in to: if '@' in item: emails_to.append(item.strip()) else: user_info = acl_tool.get_user_info(item.strip()) emails_to.append(user_info.email) for item in cc: if '@' in item: emails_cc.append(item.strip()) else: user_info = acl_tool.get_user_info(item.strip()) emails_cc.append(user_info.email) email_tool.sendEmail(formdata['message'], emails_to, email_tool.get_addr_from(), formdata['subject'], p_cc=emails_cc) save_bulk_email(self.getSite(), emails_to, email_tool.get_addr_from(), formdata['subject'], formdata['message'], where_to_save=path_in_site( self.get_consultation()), addr_cc=emails_cc) self.setSessionInfoTrans( 'Email sent to %s and in CC to %s.' % (','.join(emails_to), ','.join(emails_cc))) return REQUEST.RESPONSE.redirect(self.absolute_url() + '/send_email') else: self.setSessionErrorsTrans('The form contains errors. Please ' 'correct them and try again.') else: formdata = dict((key, '') for key in keys) return self._create_email_html(formdata=formdata, formerrors=formerrors)
def send_email(self, REQUEST): """ Send e-mail """ keys = ('to', 'cc', 'subject', 'message') formerrors = {} if REQUEST.REQUEST_METHOD == 'POST': formdata = dict((key, REQUEST.form.get(key, '')) for key in keys) email_tool = self.getEmailTool() acl_tool = self.getAuthenticationTool() emails_to = [] emails_cc = [] to = formdata['to'] cc = formdata['cc'] message = formdata['message'] if not to: formerrors['to'] = 'At least one recipinet is needed' if not formdata['subject']: formerrors['subject'] = 'Email subject is mandatory' if not message: formerrors['message'] = 'Message body is mandatory' if not formerrors: for item in to: if '@' in item: emails_to.append(item.strip()) else: user_info = acl_tool.get_user_info(item.strip()) emails_to.append(user_info.email) for item in cc: if '@' in item: emails_cc.append(item.strip()) else: user_info = acl_tool.get_user_info(item.strip()) emails_cc.append(user_info.email) email_tool.sendEmail(formdata['message'], emails_to, email_tool.get_addr_from(), formdata['subject'], p_cc=emails_cc) save_bulk_email(self.getSite(), emails_to, email_tool.get_addr_from(), formdata['subject'], formdata['message'], where_to_save=path_in_site( self.get_consultation()), addr_cc=emails_cc) self.setSessionInfoTrans('Email sent to %s and in CC to %s.' % (','.join(emails_to), ','.join(emails_cc))) return REQUEST.RESPONSE.redirect(self.absolute_url() + '/send_email') else: self.setSessionErrorsTrans('The form contains errors. Please ' 'correct them and try again.') else: formdata = dict((key, '') for key in keys) return self._create_email_html(formdata=formdata, formerrors=formerrors)
def send_email(self, from_email, subject, body_text, cc_emails, REQUEST, to_uids=None): """ """ errors = [] if not to_uids: to_uids = [] if not (to_uids or cc_emails): errors.append('Please select at least on recipient') if not (subject or body_text): errors.append('Subject and message body cannot both be empty') for email in cc_emails: if not is_valid_email(email): errors.append('Invalid email "%s" in CC field' % email) if errors: self.setSessionErrorsTrans(errors) return REQUEST.RESPONSE.redirect(REQUEST.HTTP_REFERER) participants = self.getParticipants() subscriptions = participants.getSubscriptions() signup_emails = [participants.getAttendeeInfo(uid)['email'] for uid in to_uids if subscriptions._is_signup(uid)] account_emails = [participants.getAttendeeInfo(uid)['email'] for uid in to_uids if not subscriptions._is_signup(uid)] to_emails = signup_emails + account_emails if (self.eionet_meeting() and '*****@*****.**' not in cc_emails): cc_emails.append('*****@*****.**') # TODO validate cc_emails # We need to send the emails to signups one by one since each email # might be different (if they contain links to documents for # which the authentication keys is inserted into the link) for uid in to_uids: if subscriptions._is_signup(uid): signup_email = participants.getAttendeeInfo(uid)['email'] signup_body_text = self.insert_auth_link(body_text, uid) result = self._send_email( from_email, [signup_email], cc_emails, subject, signup_body_text, only_to=True) if account_emails: result = self._send_email(from_email, account_emails, cc_emails, subject, body_text) save_bulk_email(self.getSite(), to_emails, from_email, subject, body_text, where_to_save=path_in_site(self.getMeeting()), addr_cc=cc_emails) return self.getFormsTool().getContent( {'here': self, 'meeting': self.getMeeting(), 'result': result}, 'naaya.content.meeting.email_sendstatus')
def _send_invitation(self, name, email, organization, notes, message, inviter_userid, inviter_name, web_form=False, preview=False): errors = [] if not name: errors.append(('name', ValueError('Name is mandatory'))) if not email: errors.append(('email', ValueError('Email is mandatory'))) if errors: if web_form: raise FormError(errors) else: raise errors[0][1] mail_opts = { 'name': name, 'consultation': self.get_consultation(), 'inviter_name': inviter_name, 'inviter_message': message, } if preview: mail_opts['keyed_url'] = '[PRIVATE URL]' mail_data = self._invite_email.render_email(**mail_opts) return {'preview_mail': mail_data} invite_args = { 'inviter_userid': inviter_userid, 'name': name, 'email': email, 'organization': organization, 'notes': notes, } key = self._create_invitation(**invite_args) mail_opts['keyed_url'] = self.absolute_url() + '/welcome?key=' + key mail_data = self._invite_email.render_email(**mail_opts) email_tool = self.getEmailTool() email_tool.sendEmail(mail_data['body_text'], email, email_tool.get_addr_from(), mail_data['subject']) save_bulk_email(self.getSite(), [email], email_tool.get_addr_from(), mail_data['subject'], mail_data['body_text'], where_to_save=path_in_site(self.get_consultation()))
def test_save_mail(self, get_zope_env): get_zope_env.return_value = self.TMP_FOLDER filename = save_bulk_email(self.portal, ['*****@*****.**', '*****@*****.**'], '*****@*****.**', 'Hello!', 'Hello World!') self.assertTrue(os.path.isfile(filename)) message_file = open(filename, 'r+') mail = message_from_file(message_file) message_file.close() self.assertEqual(mail.get('Subject'), 'Hello!') self.assertEqual(mail.get_payload(), 'Hello World!') self.assertEqual(mail.get_all('To'), ['*****@*****.**', '*****@*****.**']) self.assertEqual(mail.get('From'), '*****@*****.**') emails = get_bulk_emails(self.portal) self.assertEqual(len(emails), 1) self.failUnless('content' in emails[0]) self.failUnless('date' in emails[0]) self.failUnless('subject' in emails[0]) self.failUnless('sender' in emails[0]) self.failUnless('recipients' in emails[0]) self.assertEqual(emails[0]['content'], 'Hello World!') self.assertEqual(emails[0]['subject'], 'Hello!') self.assertEqual(emails[0]['sender'], '*****@*****.**') self.assertEqual(emails[0]['recipients'], ['*****@*****.**', '*****@*****.**'])
def _send_invitation(self, name, email, organization, notes, message, inviter_userid, inviter_name, web_form=False, preview=False): errors = [] if not name: errors.append(('name', ValueError('Name is mandatory'))) if not email: errors.append(('email', ValueError('Email is mandatory'))) if errors: if web_form: raise FormError(errors) else: raise errors[0][1] mail_opts = { 'name': name, 'consultation': self.get_consultation(), 'inviter_name': inviter_name, 'inviter_message': message, } if preview: mail_opts['keyed_url'] = '[PRIVATE URL]' mail_data = self._invite_email.render_email(**mail_opts) return {'preview_mail': mail_data} invite_args = { 'inviter_userid': inviter_userid, 'name': name, 'email': email, 'organization': organization, 'notes': notes, } key = self._create_invitation(**invite_args) mail_opts['keyed_url'] = self.absolute_url() + '/welcome?key=' + key mail_data = self._invite_email.render_email(**mail_opts) email_tool = self.getEmailTool() email_tool.sendEmail(mail_data['body_text'], email, email_tool.get_addr_from(), mail_data['subject']) save_bulk_email(self.getSite(), [email], email_tool.get_addr_from(), mail_data['subject'], mail_data['body_text'], where_to_save=path_in_site(self.get_consultation()))
def test_save_mail(self, get_zope_env): get_zope_env.return_value = self.TMP_FOLDER tos = ['*****@*****.**', '*****@*****.**'] filename = save_bulk_email(self.portal, tos[:], '*****@*****.**', 'Hello!', '\nHello World!\n\n') self.assertTrue(os.path.isfile(filename)) emails = get_bulk_emails(self.portal) self.assertEqual(len(emails), 1) self.failUnless('content' in emails[0]) self.failUnless('date' in emails[0]) self.failUnless('subject' in emails[0]) self.failUnless('sender' in emails[0]) self.failUnless('recipients' in emails[0]) self.assertEqual(emails[0]['content'], '<br/>Hello World!</p><p>') self.assertEqual(emails[0]['subject'], 'Hello!') self.assertEqual(emails[0]['sender'], '*****@*****.**') self.assertEqual(emails[0]['recipients'], ['*****@*****.**', '*****@*****.**'])
def test_save_mail(self, get_zope_env): get_zope_env.return_value = self.TMP_FOLDER tos = ['*****@*****.**', '*****@*****.**'] filename = save_bulk_email(self.portal, tos[:], '*****@*****.**', 'Hello!', '\nHello World!\n\n') self.assertTrue(os.path.isfile(filename)) emails = get_bulk_emails(self.portal) self.assertEqual(len(emails), 1) self.failUnless('content' in emails[0]) self.failUnless('date' in emails[0]) self.failUnless('subject' in emails[0]) self.failUnless('sender' in emails[0]) self.failUnless('recipients' in emails[0]) self.assertEqual(emails[0]['content'], '<br/>Hello World!</p><p>') self.assertEqual(emails[0]['subject'], 'Hello!') self.assertEqual(emails[0]['sender'], '*****@*****.**') self.assertEqual(emails[0]['recipients'], ['*****@*****.**', '*****@*****.**'])