예제 #1
0
    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)
예제 #3
0
    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')
예제 #4
0
    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()))
예제 #5
0
    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()))
예제 #7
0
    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'], ['*****@*****.**', '*****@*****.**'])
예제 #8
0
    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'], ['*****@*****.**', '*****@*****.**'])