mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-09 22:38:19 +02:00
Merge 76c5e0ea7c into 50282414aa
This commit is contained in:
commit
2d66659574
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, 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)
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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