1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00
This commit is contained in:
fsboehme 2015-04-15 10:05:37 +00:00
commit 2d66659574
3 changed files with 137 additions and 1 deletions

49
django_mailbox/mail.py Normal file
View file

@ -0,0 +1,49 @@
from django.core.mail import get_connection, EmailMultiAlternatives, EmailMessage, make_msgid
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, headers={'Message-ID': make_msgid()})
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, headers={'Message-ID': make_msgid()})
message.attach_alternative(html, 'text/html')
messages.append(message)
record_messages(mailbox, messages)
return connection.send_messages(messages)

View file

@ -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
@ -246,9 +248,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
@ -428,6 +432,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,

View file

@ -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']