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

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

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

Loading…
Cancel
Save