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)
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) )
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']}))
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))
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')
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) )
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']}))
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)
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)
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))
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())
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'])
def test_save_email(self): email = mail_model.save_email(*self.EMAIL_PARAMS) email2 = mail_model.get_email(email['uri']) self.assertEqual(email, email2)
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())