Пример #1
0
def send_email( email_uri ):
    """ Send the email to the intended target audience """
    email = mail_api.get_email(email_uri)

    if email['audience'] == 'groups':
        to_addresses = [g['address'] for g in group_api.get_groups(email['sequence'])]
    elif email['audience'] == 'individuals':
        to_addresses = [sequence_api.sequence_list_name(email['sequence'])]

    text_body = render_to_string('mail/email.txt', {'email': email})
    html_body = render_to_string('mail/email.html', {'email': email})

    batch_size = 1000

    for i in range(0, len(to_addresses), batch_size):
        mailgun_api.send_mass_email(
            to_addresses[i:i+batch_size],
            settings.DEFAULT_FROM_EMAIL,
            email['subject'],
            text_body,
            html_body,
            email['tags'].split(','),
            sequence_api.sequence_campaign(email['sequence'])
        )
    mail_api.mark_sent(email_uri)
Пример #2
0
def edit( request, id ):
    email_uri = mail_api.id2uri(id)
    email = mail_api.get_email(email_uri)

    if request.method == 'POST':
        subject = request.POST.get('subject')
        html_body = _rewrite_links(request.POST.get('body_text'))
        text_body = _text_from_html(html_body)
        tags = request.POST.get('tags')
        sequence = int(request.POST.get('to').split('-')[1])
        audience = request.POST.get('to').split('-')[0]

        mail_api.update_email(email_uri, subject, text_body, html_body, 
            sequence, audience, tags)
        return http.HttpResponseRedirect(reverse('mail_schedule'))

    context = {
        'sequences': sequence_model.get_all_sequences(),
        'email': email,
    }
    return render_to_response(
        'mail/compose.html',
        context,
        context_instance=RequestContext(request)
    )
Пример #3
0
def copy(request, id):
    email_uri = mail_api.id2uri(id)
    email = mail_api.get_email(email_uri)
    new_email = mail_api.save_email(email['subject'], email['text_body'],
                                    email['html_body'], email['sequence'],
                                    email['audience'], email['tags'])
    #TODO should we update the sequence

    return http.HttpResponseRedirect(
        reverse('mail_edit', kwargs={'id': new_email['id']}))
Пример #4
0
def view_email(request, id):
    email_uri = mail_api.id2uri(id)
    email = mail_api.get_email(email_uri)

    context = {
        'email': email,
    }
    return render_to_response('mail/view.html',
                              context,
                              context_instance=RequestContext(request))
Пример #5
0
 def test_update_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.update_email(email['uri'], 'New sub', 'New Text', '', 2, 'individuals', 'tag1')
     email2 = mail_model.get_email(email['uri'])
     self.assertNotEqual(email, email2)
     self.assertEqual(email2['subject'], 'New sub')
     self.assertEqual(email2['text_body'], 'New Text')
     self.assertEqual(email2['html_body'], '')
     self.assertEqual(email2['sequence'], 2)
     self.assertEqual(email2['audience'], 'individuals')
     self.assertEqual(email2['tags'], 'tag1')
Пример #6
0
def view_email( request, id ):
    email_uri = mail_api.id2uri(id)
    email = mail_api.get_email(email_uri)

    context = {
        'email': email,
    }
    return render_to_response(
        'mail/view.html',
        context,
        context_instance=RequestContext(request)
    )
Пример #7
0
 def test_update_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.update_email(email['uri'], 'New sub', 'New Text', '', 2,
                             'individuals', 'tag1')
     email2 = mail_model.get_email(email['uri'])
     self.assertNotEqual(email, email2)
     self.assertEqual(email2['subject'], 'New sub')
     self.assertEqual(email2['text_body'], 'New Text')
     self.assertEqual(email2['html_body'], '')
     self.assertEqual(email2['sequence'], 2)
     self.assertEqual(email2['audience'], 'individuals')
     self.assertEqual(email2['tags'], 'tag1')
Пример #8
0
def copy( request, id ):
    email_uri = mail_api.id2uri(id)
    email = mail_api.get_email(email_uri)
    new_email = mail_api.save_email(
        email['subject'],
        email['text_body'],
        email['html_body'],
        email['sequence'],
        email['audience'],
        email['tags']
    )
    #TODO should we update the sequence

    return http.HttpResponseRedirect(reverse('mail_edit', kwargs={'id': new_email['id']}))
Пример #9
0
def send_email(email_uri):
    """ Send the email to the intended target audience """
    email = mail_api.get_email(email_uri)

    if email['audience'] == 'groups':
        to_address = ','.join(
            [g['address'] for g in group_api.get_groups(email['sequence'])])
    elif email['audience'] == 'individuals':
        to_address = sequence_api.sequence_list_name(email['sequence'])

    text_body = render_to_string('mail/email.txt', {'email': email})
    html_body = render_to_string('mail/email.html', {'email': email})

    mailgun_api.send_email(to_address, settings.DEFAULT_FROM_EMAIL,
                           email['subject'], text_body, html_body,
                           email['tags'].split(','),
                           sequence_api.sequence_campaign(email['sequence']))
    mail_api.mark_sent(email_uri)
Пример #10
0
def send_email( email_uri ):
    """ Send the email to the intended target audience """
    email = mail_api.get_email(email_uri)

    if email['audience'] == 'groups':
        to_address = ','.join([g['address'] for g in group_api.get_groups(email['sequence'])])
    elif email['audience'] == 'individuals':
        to_address = sequence_api.sequence_list_name(email['sequence'])

    text_body = render_to_string('mail/email.txt', {'email': email})
    html_body = render_to_string('mail/email.html', {'email': email})

    mailgun_api.send_email(
        to_address,
        settings.DEFAULT_FROM_EMAIL,
        email['subject'],
        text_body,
        html_body,
        email['tags'].split(','),
        sequence_api.sequence_campaign(email['sequence'])
    )
    mail_api.mark_sent(email_uri)
Пример #11
0
def edit(request, id):
    email_uri = mail_api.id2uri(id)
    email = mail_api.get_email(email_uri)

    if request.method == 'POST':
        subject = request.POST.get('subject')
        html_body = _rewrite_links(request.POST.get('body_text'))
        text_body = _text_from_html(html_body)
        tags = request.POST.get('tags')
        sequence = int(request.POST.get('to').split('-')[1])
        audience = request.POST.get('to').split('-')[0]

        mail_api.update_email(email_uri, subject, text_body, html_body,
                              sequence, audience, tags)
        return http.HttpResponseRedirect(reverse('mail_schedule'))

    context = {
        'sequences': sequence_model.get_all_sequences(),
        'email': email,
    }
    return render_to_response('mail/compose.html',
                              context,
                              context_instance=RequestContext(request))
Пример #12
0
 def test_schedule_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.schedule_email(email['uri'], datetime.datetime.utcnow())
     email2 = mail_model.get_email(email['uri'])
     self.assertIn('date_scheduled', email2.keys())
Пример #13
0
 def test_delete_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.delete_email(email['uri'])
     with self.assertRaises(Exception):
         email2 = mail_model.get_email(email['uri'])
Пример #14
0
 def test_save_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     email2 = mail_model.get_email(email['uri'])
     self.assertEqual(email, email2)
Пример #15
0
 def test_mark_sent(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.mark_sent(email['uri'])
     email2 = mail_model.get_email(email['uri'])
     self.assertIn('date_sent', email2.keys())
Пример #16
0
 def test_schedule_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.schedule_email(email['uri'], datetime.datetime.utcnow())
     email2 = mail_model.get_email(email['uri'])
     self.assertIn('date_scheduled', email2.keys())
Пример #17
0
 def test_delete_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.delete_email(email['uri'])
     with self.assertRaises(Exception):
         email2 = mail_model.get_email(email['uri'])
Пример #18
0
 def test_mark_sent(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     mail_model.mark_sent(email['uri'])
     email2 = mail_model.get_email(email['uri'])
     self.assertIn('date_sent', email2.keys())
Пример #19
0
 def test_save_email(self):
     email = mail_model.save_email(*self.EMAIL_PARAMS)
     email2 = mail_model.get_email(email['uri'])
     self.assertEqual(email, email2)