from smtplib import SMTPException from anymail.exceptions import AnymailRequestsAPIError from django.conf import settings from django.core.mail import EmailMessage from django.http import JsonResponse from django.shortcuts import get_object_or_404 from django.utils.decorators import method_decorator from django.views import generic from django.views.decorators.csrf import ensure_csrf_cookie from pictures.models import Message class MessageListView(generic.ListView): model = Message template_name = "pictures/messages-list.html" context_object_name = "messages" @method_decorator(ensure_csrf_cookie, name="dispatch") class MessageDetailView(generic.DetailView): model = Message template_name = "pictures/messages-detail.html" context_object_name = "message" def send_email(request, pk): message = get_object_or_404(Message, pk=pk) all_media = message.media_files.all() media_count = len(all_media) if media_count > 1: subject = "Vos photos" else: subject = "Votre photo" message_text = ( message.content + "\n\n-- \nEnvoyé depuis votre cadre photo, par Claire & Gabriel" ) try: email = EmailMessage( subject, message_text, from_email=None, to=[settings.EMAIL_RECIPIENT], ) for media in all_media: email.attach_file(media.file.path) email.send(fail_silently=False) except (SMTPException, AnymailRequestsAPIError) as e: return JsonResponse({"status": "error", "message": str(e)}, status=500) return JsonResponse({"status": "ok"}, status=200)