Przeglądaj źródła

Correos a inscritos de 10 en 10

Celestino Rey 6 miesięcy temu
rodzic
commit
b3443f510a
1 zmienionych plików z 30 dodań i 17 usunięć
  1. 30 17
      src/eventos/views.py

+ 30 - 17
src/eventos/views.py

@@ -554,23 +554,36 @@ def enviar_correo_inscritos_html(request, evento_id):
 
             from_email = settings.DEFAULT_FROM_EMAIL
 
-            for usuario in destinatarios:
-                html_content = render_to_string(
-                    'emails/correo_a_inscritos.html',
-                    {'evento': evento, 
-                    'usuario': usuario, 
-                    'mensaje_usuario': mensaje_usuario, 
-                    'asunto_usuario': asunto_usuario}
-                )
-
-                msg = EmailMultiAlternatives(
-                    asunto,
-                    mensaje_usuario,
-                    from_email,
-                    [usuario],
-                )
-                msg.attach_alternative(html_content, "text/html")
-                msg.send()
+            # Enviar correos en lotes de 10 en 10
+            batch_size = 10
+            total_enviados = 0
+            
+            for i in range(0, len(destinatarios), batch_size):
+                batch = destinatarios[i:i + batch_size]
+                
+                for usuario in batch:
+                    html_content = render_to_string(
+                        'emails/correo_a_inscritos.html',
+                        {'evento': evento, 
+                        'usuario': usuario, 
+                        'mensaje_usuario': mensaje_usuario, 
+                        'asunto_usuario': asunto_usuario}
+                    )
+
+                    msg = EmailMultiAlternatives(
+                        asunto,
+                        mensaje_usuario,
+                        from_email,
+                        [usuario],
+                    )
+                    msg.attach_alternative(html_content, "text/html")
+                    msg.send()
+                    total_enviados += 1
+                
+                # Pequeña pausa entre lotes para evitar sobrecarga
+                if i + batch_size < len(destinatarios):
+                    import time
+                    time.sleep(1)  # Pausa de 1 segundo entre lotes
 
             messages.success(request, f"Correo enviado a {len(destinatarios)} inscritos.")
             return redirect('eventos:detalle_evento', evento_id=evento.id)