mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-10 06:48: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 os.path
|
||||||
import sys
|
import sys
|
||||||
import uuid
|
import uuid
|
||||||
|
from django.contrib.contenttypes import generic
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
import six
|
import six
|
||||||
from six.moves.urllib.parse import parse_qs, unquote, urlparse
|
from six.moves.urllib.parse import parse_qs, unquote, urlparse
|
||||||
|
|
@ -246,9 +248,11 @@ class Mailbox(models.Model):
|
||||||
|
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
def record_outgoing_message(self, message):
|
def record_outgoing_message(self, message, related_object=None):
|
||||||
msg = self._process_message(message)
|
msg = self._process_message(message)
|
||||||
msg.outgoing = True
|
msg.outgoing = True
|
||||||
|
if related_object:
|
||||||
|
msg.related_object = related_object
|
||||||
msg.save()
|
msg.save()
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
|
@ -428,6 +432,17 @@ class Message(models.Model):
|
||||||
verbose_name=_(u'In reply to'),
|
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 = models.CharField(
|
||||||
_('From header'),
|
_('From header'),
|
||||||
max_length=255,
|
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