mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-10 06:48:19 +02:00
Related object, mass mail utils
Added generic fkey on message in order to allow associating messages with other objects Added mass mail utilities that store outgoing messages (including link to other object)
This commit is contained in:
parent
4c1eff5202
commit
33c9c32e7e
3 changed files with 137 additions and 1 deletions
49
django_mailbox/mail.py
Normal file
49
django_mailbox/mail.py
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
from django.core.mail import get_connection, EmailMultiAlternatives, EmailMessage
|
||||
|
||||
|
||||
def record_messages(mailbox, messages, related_object=None):
|
||||
"""
|
||||
Used in functions below. Records sent messages in Django Mailbox.
|
||||
"""
|
||||
for message in messages:
|
||||
mailbox.record_outgoing_message(message.message(), related_object)
|
||||
|
||||
|
||||
def send_mass_mail_recorded(datatuple, mailbox, related_object=None, bcc=None,
|
||||
fail_silently=False, auth_user=None, auth_password=None, connection=None):
|
||||
"""
|
||||
Shadows Django's send mass mail, but records each outgoing message to the
|
||||
specified mailbox.
|
||||
|
||||
Also added optional bcc argument.
|
||||
"""
|
||||
connection = connection or get_connection(
|
||||
username=auth_user, password=auth_password, fail_silently=fail_silently
|
||||
)
|
||||
|
||||
messages = [EmailMessage(subject, message, sender, recipient, bcc)
|
||||
for subject, message, sender, recipient in datatuple]
|
||||
|
||||
record_messages(mailbox, messages, related_object)
|
||||
|
||||
return connection.send_messages(messages)
|
||||
|
||||
|
||||
def send_mass_html_mail_recorded(datatuple, mailbox, related_object=None, bcc=None,
|
||||
fail_silently=False, user=None, password=None, connection=None):
|
||||
"""
|
||||
Like above, but lets you send HTML emails.
|
||||
"""
|
||||
connection = connection or get_connection(
|
||||
username=user, password=password, fail_silently=fail_silently
|
||||
)
|
||||
|
||||
messages = []
|
||||
for subject, text, html, from_email, recipient in datatuple:
|
||||
message = EmailMultiAlternatives(subject, text, from_email, recipient, bcc)
|
||||
message.attach_alternative(html, 'text/html')
|
||||
messages.append(message)
|
||||
|
||||
record_messages(mailbox, messages)
|
||||
|
||||
return connection.send_messages(messages)
|
||||
|
|
@ -16,6 +16,8 @@ import mimetypes
|
|||
import os.path
|
||||
import sys
|
||||
import uuid
|
||||
from django.contrib.contenttypes import generic
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
import six
|
||||
from six.moves.urllib.parse import parse_qs, unquote, urlparse
|
||||
|
|
@ -233,9 +235,11 @@ class Mailbox(models.Model):
|
|||
|
||||
return msg
|
||||
|
||||
def record_outgoing_message(self, message):
|
||||
def record_outgoing_message(self, message, related_object=None):
|
||||
msg = self._process_message(message)
|
||||
msg.outgoing = True
|
||||
if related_object:
|
||||
msg.related_object = related_object
|
||||
msg.save()
|
||||
return msg
|
||||
|
||||
|
|
@ -413,6 +417,17 @@ class Message(models.Model):
|
|||
verbose_name=_(u'In reply to'),
|
||||
)
|
||||
|
||||
related_content_type = models.ForeignKey(
|
||||
ContentType,
|
||||
blank=True,
|
||||
null=True
|
||||
)
|
||||
related_object_id = models.PositiveIntegerField(
|
||||
blank=True,
|
||||
null=True
|
||||
)
|
||||
related_object = generic.GenericForeignKey('related_content_type', 'related_object_id')
|
||||
|
||||
from_header = models.CharField(
|
||||
_('From header'),
|
||||
max_length=255,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
# -*- 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 field 'Message.related_content_type'
|
||||
db.add_column('django_mailbox_message', 'related_content_type',
|
||||
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'], null=True, blank=True),
|
||||
keep_default=False)
|
||||
|
||||
# Adding field 'Message.related_object_id'
|
||||
db.add_column('django_mailbox_message', 'related_object_id',
|
||||
self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True),
|
||||
keep_default=False)
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
# Deleting field 'Message.related_content_type'
|
||||
db.delete_column('django_mailbox_message', 'related_content_type_id')
|
||||
|
||||
# Deleting field 'Message.related_object_id'
|
||||
db.delete_column('django_mailbox_message', 'related_object_id')
|
||||
|
||||
|
||||
models = {
|
||||
'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'}),
|
||||
'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'})
|
||||
},
|
||||
'django_mailbox.mailbox': {
|
||||
'Meta': {'object_name': 'Mailbox'},
|
||||
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||
'from_email': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'uri': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'django_mailbox.message': {
|
||||
'Meta': {'object_name': 'Message'},
|
||||
'body': ('django.db.models.fields.TextField', [], {}),
|
||||
'encoded': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'from_header': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'in_reply_to': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'replies'", 'null': 'True', 'to': "orm['django_mailbox.Message']"}),
|
||||
'mailbox': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'messages'", 'to': "orm['django_mailbox.Mailbox']"}),
|
||||
'message_id': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'outgoing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||
'processed': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'read': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
|
||||
'related_content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}),
|
||||
'related_object_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'subject': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'to_header': ('django.db.models.fields.TextField', [], {})
|
||||
},
|
||||
'django_mailbox.messageattachment': {
|
||||
'Meta': {'object_name': 'MessageAttachment'},
|
||||
'document': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
|
||||
'headers': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'message': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'attachments'", 'null': 'True', 'to': "orm['django_mailbox.Message']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['django_mailbox']
|
||||
Loading…
Add table
Add a link
Reference in a new issue