send mail to jugendleiter of member list

v1-0-stable
Christian Merten 9 years ago
parent 14d7acc2f8
commit c56bec04f9

@ -6,6 +6,7 @@ from django.db import models
from django import forms
from .models import Message, Attachment, MessageForm
from .mailutils import NOT_SENT, PARTLY_SENT
class AttachmentInline(admin.StackedInline):
@ -29,8 +30,7 @@ class MessageAdmin(admin.ModelAdmin):
print("calling send_message")
if request.POST.get('confirmed'):
for msg in queryset:
msg.submit()
self.message_user(request, _("Message sent"))
submit_message(msg, request)
else:
context = {
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
@ -42,19 +42,23 @@ class MessageAdmin(admin.ModelAdmin):
def response_change(self, request, obj):
if "_send" in request.POST:
if not obj.submit():
messages.error(request, _("Failed to send message"))
else:
messages.info(request, _("Successfully sent message"))
submit_message(obj, request)
return super(MessageAdmin, self).response_change(request, obj)
def response_add(self, request, obj):
if "_send" in request.POST:
if not obj.submit():
messages.error(request, _("Failed to send message"))
else:
messages.info(request, _("Successfully sent message"))
submit_message(obj, request)
return super(MessageAdmin, self).response_add(request, obj)
def submit_message(msg, request):
success = msg.submit()
if success == NOT_SENT:
messages.error(request, _("Failed to send message"))
elif success == PARTLY_SENT:
messages.warning(request, _("Failed to send some messages"))
else:
messages.info(request, _("Successfully sent message"))
admin.site.register(Message, MessageAdmin)

@ -1,8 +1,12 @@
from django.core.mail import EmailMessage
NOT_SENT, SENT, PARTLY_SENT = 0, 1, 2
def send(subject, content, sender, recipients, reply_to=None,
attachments=None):
failed, succeeded = False, False
if type(recipients) != list:
recipients = [recipients]
if reply_to is not None:
@ -18,9 +22,11 @@ def send(subject, content, sender, recipients, reply_to=None,
email.send()
except Exception as e:
print("Error when sending mail:", e)
return False
failed = True
else:
return True
succeeded = True
return NOT_SENT if failed and not succeeded else SENT if not failed\
and succeeded else PARTLY_SENT
def get_content(content):

@ -2,7 +2,7 @@ from django.db import models
from django.core.exceptions import ValidationError
from django import forms
from django.utils.translation import ugettext_lazy as _
from .mailutils import send, get_content
from .mailutils import send, get_content, SENT, PARTLY_SENT
import os
@ -57,32 +57,28 @@ class Message(models.Model):
def submit(self):
"""Sends the mail to the specified group of members"""
members = set()
for group in self.to_groups.all():
group_members = group.member_set.all()
for member in group_members:
if not member.gets_newsletter:
continue
members.add(member)
groups = [gr.member_set.all() for gr in self.to_groups.all()]
members.update([m for gr in groups for m in gr])
if self.to_memberlist is not None:
for memberonlist in self.to_memberlist.memberonlist_set.all():
if memberonlist.member.gets_newsletter:
members.add(memberonlist.member)
members.update([mol.member for mol in
self.to_memberlist.memberonlist_set.all()])
members.update(self.to_memberlist.jugendleiter.all())
filtered = [m for m in members if m.gets_newsletter]
print("sending mail to", filtered)
attach = [a.f.path for a in Attachment.objects.filter(msg__id=self.pk)
if a.f.name]
success = send(self.subject, get_content(self.content),
self.from_addr,
[member.email for member in members],
[member.email for member in filtered],
attachments=attach)
for a in Attachment.objects.filter(msg__id=self.pk):
if a.f.name:
os.remove(a.f.path)
a.delete()
if success:
if success == SENT or success == PARTLY_SENT:
self.sent = True
self.save()
return True
else:
return False
return success
class Meta:
verbose_name = _('message')

Loading…
Cancel
Save