Skip to content

Commit

Permalink
Adding mail logging
Browse files Browse the repository at this point in the history
  • Loading branch information
alexlovelltroy committed Nov 1, 2013
1 parent ff6a58f commit 5b8a99b
Show file tree
Hide file tree
Showing 5 changed files with 309 additions and 3 deletions.
26 changes: 23 additions & 3 deletions classy_mail/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from django.template import Template, Context ,loader, TemplateDoesNotExist
from django.contrib.sites.models import Site
from django.core.mail import EmailMultiAlternatives
from .models import EmailTemplate
from .models import EmailTemplate, EmailMessageLog
from .exceptions import *

# Utility Functions
Expand Down Expand Up @@ -176,6 +176,26 @@ def get_context(self):
context.update(dict(site = Site.objects.get_current()))
return context

class LogMessageMixin(object):
def send(self, log_msg=True):
self.msg = self.build_msg()
# Does this need to be a manager method?
if log_msg:
log = EmailMessageLog(
message_text = self.msg.as_string(),
subject = self.msg.get('Subject'),
from_header = self.msg.get('From'),
to_header = self.msg.get('To'),
cc_header = self.msg.get('Cc'),
bcc_header = self.msg.get('Bcc'),
)
self.msg.send()
log.save()
else:
self.msg.send()




class SimpleEmail(BaseEmail):
"""This email needs everything passed in to init"""
Expand All @@ -196,10 +216,10 @@ def build_msg(self):
return self._msg


class ModelTemplateEmail(ModelTemplateMixin, BaseEmail):
class ModelTemplateEmail(LogMessageMixin, ModelTemplateMixin, BaseEmail):
pass


class FileTemplateEmail(FileTemplateMixin, BaseEmail):
class FileTemplateEmail(LogMessageMixin, FileTemplateMixin, BaseEmail):
pass

158 changes: 158 additions & 0 deletions classy_mail/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

def forwards(self, orm):
# Adding model 'EmailTemplate'
db.create_table(u'classy_mail_emailtemplate', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=64)),
('description', self.gf('django.db.models.fields.CharField')(max_length=512)),
('subject_content', self.gf('django.db.models.fields.CharField')(max_length=512)),
('text_content', self.gf('django.db.models.fields.TextField')()),
('html_content', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
))
db.send_create_signal(u'classy_mail', ['EmailTemplate'])

# Adding model 'CampaignAddressee'
db.create_table(u'classy_mail_campaignaddressee', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)),
('email_address', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)),
('first_name', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
('last_name', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
))
db.send_create_signal(u'classy_mail', ['CampaignAddressee'])

# Adding model 'EmailCampaign'
db.create_table(u'classy_mail_emailcampaign', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=64)),
('description', self.gf('django.db.models.fields.CharField')(max_length=512)),
('template_name', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
('subject_content', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
('text_content', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
('html_content', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
))
db.send_create_signal(u'classy_mail', ['EmailCampaign'])

# Adding M2M table for field emails on 'EmailCampaign'
m2m_table_name = db.shorten_name(u'classy_mail_emailcampaign_emails')
db.create_table(m2m_table_name, (
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
('emailcampaign', models.ForeignKey(orm[u'classy_mail.emailcampaign'], null=False)),
('campaignaddressee', models.ForeignKey(orm[u'classy_mail.campaignaddressee'], null=False))
))
db.create_unique(m2m_table_name, ['emailcampaign_id', 'campaignaddressee_id'])

# Adding model 'CampaignMail'
db.create_table(u'classy_mail_campaignmail', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('campaign', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['classy_mail.EmailCampaign'])),
('adressee', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['classy_mail.CampaignAddressee'])),
('date_sent', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
('date_opened', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
('date_clicked', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
))
db.send_create_signal(u'classy_mail', ['CampaignMail'])


def backwards(self, orm):
# Deleting model 'EmailTemplate'
db.delete_table(u'classy_mail_emailtemplate')

# Deleting model 'CampaignAddressee'
db.delete_table(u'classy_mail_campaignaddressee')

# Deleting model 'EmailCampaign'
db.delete_table(u'classy_mail_emailcampaign')

# Removing M2M table for field emails on 'EmailCampaign'
db.delete_table(db.shorten_name(u'classy_mail_emailcampaign_emails'))

# Deleting model 'CampaignMail'
db.delete_table(u'classy_mail_campaignmail')


models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'classy_mail.campaignaddressee': {
'Meta': {'object_name': 'CampaignAddressee'},
'email_address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
},
u'classy_mail.campaignmail': {
'Meta': {'object_name': 'CampaignMail'},
'adressee': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['classy_mail.CampaignAddressee']"}),
'campaign': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['classy_mail.EmailCampaign']"}),
'date_clicked': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'date_opened': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'date_sent': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
},
u'classy_mail.emailcampaign': {
'Meta': {'object_name': 'EmailCampaign'},
'description': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
'emails': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['classy_mail.CampaignAddressee']", 'symmetrical': 'False'}),
'html_content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
'subject_content': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
'template_name': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
'text_content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
},
u'classy_mail.emailtemplate': {
'Meta': {'object_name': 'EmailTemplate'},
'description': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
'html_content': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
'subject_content': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
'text_content': ('django.db.models.fields.TextField', [], {})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}

complete_apps = ['classy_mail']
Loading

0 comments on commit 5b8a99b

Please # to comment.