diff --git a/jdav_web/mailer/admin.py b/jdav_web/mailer/admin.py index cf44d54..312c9f2 100644 --- a/jdav_web/mailer/admin.py +++ b/jdav_web/mailer/admin.py @@ -30,7 +30,7 @@ class MessageAdmin(admin.ModelAdmin): inlines = [AttachmentInline] actions = ['send_message'] form = MessageForm - filter_horizontal = ('to_members',) + filter_horizontal = ('to_members','reply_to') def send_message(self, request, queryset): if request.POST.get('confirmed'): diff --git a/jdav_web/mailer/mailutils.py b/jdav_web/mailer/mailutils.py index 14e05c4..3251316 100644 --- a/jdav_web/mailer/mailutils.py +++ b/jdav_web/mailer/mailutils.py @@ -7,7 +7,7 @@ NOT_SENT, SENT, PARTLY_SENT = 0, 1, 2 HOST = os.environ.get('DJANGO_ALLOWED_HOST', 'localhost:8000').split(",")[0] -def send(subject, content, sender, recipients, reply_to=None, +def send(subject, content, sender, recipients, message_id, reply_to=None, attachments=None): failed, succeeded = False, False if type(recipients) != list: @@ -19,7 +19,8 @@ def send(subject, content, sender, recipients, reply_to=None, with mail.get_connection() as connection: for recipient in set(recipients): email = EmailMessage(subject, content, sender, [recipient], - connection=connection, **kwargs) + connection=connection, **kwargs, + headers={'Message-ID': message_id}) if attachments is not None: for attach in attachments: email.attach_file(attach) diff --git a/jdav_web/mailer/management/commands/reply_addrs.py b/jdav_web/mailer/management/commands/reply_addrs.py new file mode 100644 index 0000000..0a3f493 --- /dev/null +++ b/jdav_web/mailer/management/commands/reply_addrs.py @@ -0,0 +1,26 @@ +from django.core.management.base import BaseCommand +from mailer.models import Message +from members.models import Member + + +class Command(BaseCommand): + help = 'Shows reply-to addresses' + + def add_arguments(self, parser): + parser.add_argument('message_id', type=int) + + def handle(self, *args, **options): + replies = [] + try: + message = Message.objects.get(pk=options['message_id']) + if message.reply_to: + replies = message.reply_to.all() + except Message.DoesNotExist: + pass + + if not replies: + # send mail to all jugendleiters + replies = Member.objects.filter(group__name='Jugendleiter', + gets_newsletter=True) + response = "\n".join([l.email for l in replies]) + self.stdout.write(response) diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py index 94276f5..3b9e103 100644 --- a/jdav_web/mailer/models.py +++ b/jdav_web/mailer/models.py @@ -28,11 +28,10 @@ class Message(models.Model): to_members = models.ManyToManyField('members.Member', verbose_name=_('to member'), blank=True) - reply_to = models.ForeignKey('members.Member', - verbose_name=_('reply to'), - blank=True, - null=True, - related_name='reply_to') + reply_to = models.ManyToManyField('members.Member', + verbose_name=_('reply to'), + blank=True, + related_name='reply_to') sent = models.BooleanField(_('sent'), default=False) def __str__(self): @@ -77,8 +76,8 @@ class Message(models.Model): success = send(self.subject, get_content(self.content), SENDING_ADDRESS, emails, - attachments=attach, - reply_to=self.reply_to.email if self.reply_to else None) + message_id=self.pk, + attachments=attach) if success == SENT or success == PARTLY_SENT: self.sent = True for a in Attachment.objects.filter(msg__id=self.pk):