示例#1
0
def _send_email(sender, recipients, subject, html, send_async=True):
    if not isinstance(recipients, list):
        recipients = list(recipients)

    if send_async and config['_mailtemplates'][
            'async_sender'] == 'tgext.celery':
        from mailtemplates.lib.celery_tasks import mailtemplates_async_send_email
        mailtemplates_async_send_email.delay(subject=subject,
                                             sender=sender,
                                             recipients=recipients,
                                             html=html)
    elif send_async and config['_mailtemplates'][
            'async_sender'] == 'tgext.asyncjob':
        from tgext.asyncjob import asyncjob_perform
        mailer = get_mailer(None)
        message = Message(subject=subject,
                          sender=sender,
                          recipients=recipients,
                          html=html)
        asyncjob_perform(mailer.send_immediately, message=message)
    else:
        try:
            mailer = get_mailer(_get_request())
            log.debug('using request mailer')
        except AttributeError:
            log.debug('using global mailer in not-async context')
            mailer = get_mailer(None)
        message = Message(subject=subject,
                          sender=sender,
                          recipients=recipients,
                          html=html)
        mailer.send_immediately(message)
示例#2
0
    def test_different_requests_got_different_mailers(self):
        app = app_with_mailer()

        resp1 = app.get('/test')
        mailer1 = get_mailer(resp1.req)

        resp2 = app.get('/test')
        mailer2 = get_mailer(resp2.req)

        self.assertNotEqual(mailer1, mailer2)
示例#3
0
    def test_registration_duplicate_user(self):
        resp = self.app.get('/registration')
        form = resp.form

        form['email_address'] = '*****@*****.**'
        form['password_confirm'] = 'p'
        form['password'] = '******'
        form['user_name'] = 'user1'
        resp = form.submit()

        resp = resp.follow()
        ctx = resp.req.environ['paste.testing_variables']

        assert '<strong>An email</strong> has been sent to <strong>[email protected]</strong>' \
               ' to activate the account' in resp.text

        mailer = get_mailer(ctx['req'])

        url = find_urls.findall(mailer.outbox[0].body)[0]

        # Create user in the mean while
        user = app_model.User(email_address='*****@*****.**',
                              user_name='user1',
                              password='******')

        try:
            model.DBSession.add(user)
        except AttributeError:
            pass
        flush_db_changes()

        resp = self.app.get(url)
        assert 'Username%20already%20activated' in resp.headers[
            'Set-Cookie'], resp
示例#4
0
    def test_on_complete_hook(self):
        def on_complete(reg, email_data):
            email_data['subject'] = 'CUSTOM SUBJECT: %s' % reg.activation_link
            email_data['body'] = 'CUSTOM BODY'

        tg.hooks.register('registration.on_complete', on_complete)
        resp = self.app.get('/registration')
        form = resp.form

        form['email_address'] = '*****@*****.**'
        form['password_confirm'] = 'p'
        form['password'] = '******'
        form['user_name'] = 'user1'
        resp = form.submit()

        resp = resp.follow()
        ctx = resp.req.environ['paste.testing_variables']

        assert '<strong>An email</strong> has been sent to <strong>[email protected]</strong>' \
               ' to activate the account' in resp.text

        mailer = get_mailer(ctx['req'])

        sent_email = mailer.outbox[0]
        assert sent_email.body == 'CUSTOM BODY'
        assert sent_email.subject.startswith('CUSTOM SUBJECT')
        assert sent_email.subject.find('http://localhost') >= 0

        try:
            tg.hooks.disconnect('registration.on_complete', on_complete)
        except AttributeError:
            del tg.config['hooks']['registration.on_complete']
示例#5
0
    def test_registration_activate_twice(self):
        resp = self.app.get('/registration')
        form = resp.form

        form['email_address'] = '*****@*****.**'
        form['password_confirm'] = 'p'
        form['password'] = '******'
        form['user_name'] = 'user1'
        resp = form.submit()

        resp = resp.follow()
        ctx = resp.req.environ['paste.testing_variables']

        assert '<strong>An email</strong> has been sent to <strong>[email protected]</strong>' \
               ' to activate the account' in resp.text

        mailer = get_mailer(ctx['req'])

        url = find_urls.findall(mailer.outbox[0].body)[0]
        resp = self.app.get(url)
        assert 'Account%20succesfully%20activated' in resp.headers[
            'Set-Cookie']

        resp = self.app.get(url)
        assert 'Registration%20not%20found%20or%20already%20activated' in resp.headers[
            'Set-Cookie']
示例#6
0
    def test_arg_is_request(self):
        app = app_with_mailer()
        resp = app.get('/test')

        result = get_mailer(resp.req)
        self.assertEqual(result, resp.req._mailer)
        self.assertNotEqual(result, config['tg.app_globals']._mailer)
示例#7
0
    def test_with_default_prefix(self):
        settings = {'mail.default_sender': 'sender'}

        app = app_with_mailer(None, settings)

        mailer = get_mailer(None)
        self.assertEqual(mailer.default_sender, 'sender')
示例#8
0
def send_email(to_addr, sender, subject, body, rich=None):
    # Using turbomail if it exists, 'dumb' method otherwise
    if turbomail and config.get('mail.on'):
        msg = turbomail.Message(sender, to_addr, subject,  encoding='utf-8')
        msg.plain = body
        if rich:
            msg.rich = rich
        turbomail.enqueue(msg)
    # Using tgext.mailer pluggable if it exists, 'dumb' method otherwise
    elif message:
        mailer = get_mailer(request)
        message_to_send = message(
            subject=subject,
            sender=sender,
            recipients=[to_addr],
            body=body,
            html=rich or None
        )

        if config.get('tm.enabled', False):
            mailer.send(message_to_send)
        else:
            mailer.send_immediately(message_to_send)
    else:
        _plain_send_mail(sender, to_addr, subject, body)
示例#9
0
    def test_arg_is_missing(self):
        app = app_with_mailer()
        resp = app.get('/test')

        mailer = get_mailer(None)
        self.assertEqual(mailer, config['tg.app_globals']._mailer)
        self.assertNotEqual(mailer, resp.req._mailer)
示例#10
0
    def save(self, **kw):
        if not is_valid_sn(kw['user_name']):
            flash(
                _('Caro utonto, inserisci il tuo numero di matricola nel formato indicato.'
                  ), 'error')
            return redirect('/form/edit')
        user = User.by_user_name(kw['user_name'])
        if user:
            flash(_('Matricola già in uso!'), 'error')
            return redirect('/form/edit')

        token = generate_password()
        passwd = generate_password()

        user = User()
        user.user_name = kw['user_name'].lower()
        user.email_address = user.user_name + \
                             ('@studenti.polito.it' if user.user_name[0] == 's' else '@polito.it')
        user.display_name = user.user_name
        user.first_name = kw['first_name']
        user.last_name = kw['last_name']
        user.study_course = kw['cdl']
        user.year = kw['year']
        user.interest = kw['interest']
        user.letter = kw['letter']
        user.compiled = datetime.now()
        user.token = token
        user.password = passwd
        user.created = datetime.now()
        DBSession.add(user)
        DBSession.flush()

        status_link = url('/form/status?m=', None, True) + user.user_name
        status_link += '&auth=' + token

        noreply_email = User.by_user_id(1).email_address
        mailer = get_mailer(request)
        message = Message(subject="Reclutamento WEEE Open",
                          sender=noreply_email,
                          recipients=[user.email_address],
                          body=("""Ciao!

Abbiamo ricevuto la tua candidatura per il team WEEE Open, questa è la pagina da cui potrai verificare lo stato della tua domanda:

%s

Se la domanda sarà approvata, riceverai un'email sempre a questo indirizzo con scritto chi contattare per passare al colloquio. Le stesse informazioni saranno visibili anche alla pagina di cui sopra.

Buona fortuna ;)
Il software WEEEHire per conto del team WEEE Open
""" % status_link))
        mailer.send(message)
        flash(
            _(f"Candidatura inviata con successo!\nSalva questa pagina nei preferiti per controllare lo stato. Ti abbiamo inviato lo stesso link anche a {user.email_address}"
              ))
        return redirect(status_link)
示例#11
0
def mailtemplates_async_send_email(subject, sender, recipients, html):
    """Sends email asynchronously throuh tgext.celery"""
    log.info('mailtemplates_async_send_email started')
    mailer = get_mailer(None)
    message = Message(subject=subject,
                      sender=sender,
                      recipients=recipients,
                      html=html)
    mailer.send_immediately(message)
    log.info('mailtemplates_async_send_email ended')
    def test_send_email_recipients_not_list(self, _):
        with test_context(self.app):
            app_globals = tg.app_globals._current_obj()
            mailer = get_mailer(app_globals)

            __, mail_model = model.provider.query(model.MailModel, filters=dict(name=u'Email'))
            mail_model = mail_model[0]
            send_email(recipients='*****@*****.**', sender='Marco Bosio <*****@*****.**>',
                       mail_model_name=mail_model.name, data=dict(body='body'))
            assert len(mailer.outbox) > 0, mailer.outbox
示例#13
0
def send_email(to_addr, sender, subject, body, rich=None):
    mailer = get_mailer(request)
    message_to_send = message(
        subject=subject,
        sender=sender,
        recipients=[to_addr],
        body=body,
        html=rich or None,
    )
    if config.get('tm.enabled', False):
        mailer.send(message_to_send)
    else:
        mailer.send_immediately(message_to_send)
示例#14
0
 def send_email(self, **kw):
     user = User.by_user_id(kw['user_id'])
     if user.recruiter:  # This line avoids us to pestarci i piedi a vicenda asd
         abort(403)
     recruiter = Recruiter.by_telegram(kw['recruiter'])
     user.recruiter_id = recruiter.id
     noreply_email = User.by_user_id(1).email_address
     mailer = get_mailer(request)
     message = Message(subject="Reclutamento WEEE Open",
                       sender=noreply_email,
                       recipients=[user.email_address],
                       body=kw['mail'])
     mailer.send(message)
     flash("Messaggio inviato")
     return redirect('/soviet')
示例#15
0
文件: form.py 项目: puria/ksweb
    def create(self,
               questionary_title=None,
               document_id=None,
               email_to_share=None,
               **kw):
        owner = request.identity["user"]
        if email_to_share:
            user = model.User.by_email_address(email_to_share)

            if not user:
                user = model.User(
                    user_name=email_to_share,
                    email_address=email_to_share,
                    display_name=email_to_share,
                )
        else:
            user = owner

        questionary = model.Questionary(
            title=questionary_title,
            _user=user._id,
            _owner=owner._id,
            _document=ObjectId(document_id),
        )

        if email_to_share:
            from tgext.mailer import get_mailer
            from tgext.mailer import Message

            mailer = get_mailer(request)
            share_url = tg.url("/dashboard",
                               params={"share_id": user._id},
                               qualified=True)
            message = Message(
                subject=_("Invite to a KSWEB document"),
                sender="*****@*****.**",
                recipients=[user.email_address],
                body=_(
                    "Hi, you were invited to compile the following document %s "
                    "at the following url %s" %
                    (questionary_title, share_url)),
            )
            mailer.send_immediately(message)
            flash(
                _("Questionary succesfully created and shared to %s" %
                  email_to_share))
        return dict(questionary=questionary)
示例#16
0
    def test_registration_submit(self):
        resp = self.app.get('/registration')
        form = resp.form

        form['email_address'] = '*****@*****.**'
        form['password_confirm'] = 'p'
        form['password'] = '******'
        form['user_name'] = 'user1'
        resp = form.submit()

        resp = resp.follow()
        ctx = resp.req.environ['paste.testing_variables']

        assert '<strong>An email</strong> has been sent to <strong>[email protected]</strong>' \
               ' to activate the account' in resp.text

        mailer = get_mailer(ctx['req'])
        assert len(mailer.outbox) == 1
示例#17
0
    def test_resetpassword_reset_request(self):
        user = app_model.User(email_address='*****@*****.**',
                              user_name='test',
                              display_name='Test',
                              password='******')
        try:
            app_model.DBSession.add(user)
        except AttributeError:
            # Ming DBSession doesn't have/require .add
            pass
        old_password = user.password
        flush_db_changes()

        resp = self.app.get('/resetpassword')
        form = resp.form
        assert form.action == '/resetpassword/reset_request', form.action

        form['email_address'] = '*****@*****.**'
        resp = form.submit()
        ctx = resp.req.environ['paste.testing_variables']
        mailer = get_mailer(ctx['req'])

        resp = resp.follow()

        assert 'Password reset request sent' in resp.text, resp.text

        assert len(mailer.outbox) == 1, mailer.outbox
        url = URLS_RE.findall(mailer.outbox[0].body)[0]
        resp = self.app.get(url)
        form = resp.form
        form['password'] = '******'
        form['password_confirm'] = 'alfa'
        resp = form.submit()
        assert 'Password%20changed%20successfully' in resp.headers[
            'Set-Cookie']
        _, users = model.provider.query(app_model.User)
        assert old_password != users[0].password
        resp = resp.follow()
        assert 'HELLO' in resp.text, resp.text
示例#18
0
    def test_includeme(self):
        from tgext.mailer.mailer import DummyMailer

        app = app_with_mailer({'debugmailer': 'dummy'})
        self.assertEqual(get_mailer(None).__class__, DummyMailer)
示例#19
0
def mailtemplates_async_send_email(message):
    """Sends email asynchronously throuh tgext.celery"""
    log.info('mailtemplates_async_send_email started')
    mailer = get_mailer(None)
    mailer.send_immediately(message)
    log.info('mailtemplates_async_send_email ended')
示例#20
0
def _get_request():
    """Tests fails and can't mock get_mailer, so mock this"""
    return tg.request


def _send_email(sender, recipients, subject, html, async=True):
    if not isinstance(recipients, list):
        recipients = list(recipients)

    if async and config['_mailtemplates']['async_sender'] == 'tgext.celery':
        from mailtemplates.lib.celery_tasks import mailtemplates_async_send_email
        mailtemplates_async_send_email.delay(subject=subject, sender=sender,
                                             recipients=recipients, html=html)
    elif async and config['_mailtemplates']['async_sender'] == 'tgext.asyncjob':
        from tgext.asyncjob import asyncjob_perform
        mailer = get_mailer(None)
        message = Message(subject=subject, sender=sender, recipients=recipients, html=html)
        asyncjob_perform(mailer.send_immediately, message=message)
    else:
        mailer = get_mailer(_get_request())
        message = Message(subject=subject, sender=sender, recipients=recipients, html=html)
        mailer.send_immediately(message)


def _get_variables_for_template(tmpl):
    global_vars = []
    for elem in dir(tmpl):
        if elem.startswith('_kj_block') or elem == '__main__':
            global_vars += _get_variables_for_block(tmpl, elem)
    return global_vars