Browse Source

Abre uma só conexão para múltiplos emails

pull/1193/head
Eduardo Calil 9 years ago
parent
commit
fea58ab2ec
  1. 40
      sapl/materia/email_utils.py
  2. 69
      sapl/materia/receivers.py

40
sapl/materia/email_utils.py

@ -1,9 +1,15 @@
from django.core.mail import send_mail from datetime import datetime
from django.core.mail import EmailMultiAlternatives, get_connection, send_mail
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.template import Context, loader from django.template import Context, loader
from sapl.base.models import CasaLegislativa
from sapl.settings import EMAIL_SEND_USER from sapl.settings import EMAIL_SEND_USER
from .models import AcompanhamentoMateria
def load_email_templates(templates, context={}): def load_email_templates(templates, context={}):
emails = [] emails = []
@ -16,7 +22,6 @@ def load_email_templates(templates, context={}):
return emails return emails
def enviar_emails(sender, recipients, messages): def enviar_emails(sender, recipients, messages):
''' '''
Recipients is a string list of email addresses Recipients is a string list of email addresses
@ -175,20 +180,31 @@ def do_envia_email_tramitacao(base_url, materia, status, unidade_destino):
# FIXME i18n # FIXME i18n
subject = "[SAPL] " + str(materia) + \ subject = "[SAPL] " + str(materia) + \
" - Acompanhamento de Materia Legislativa" " - Acompanhamento de Materia Legislativa"
messages = []
recipients = [] connection = get_connection()
connection.open()
for destinatario in destinatarios: for destinatario in destinatarios:
try:
email_texts = criar_email_tramitacao(base_url, email_texts = criar_email_tramitacao(base_url,
casa, casa,
materia, materia,
status, status,
unidade_destino, unidade_destino,
destinatario.hash,) destinatario.hash,)
recipients.append(destinatario.email)
messages.append({ email = EmailMultiAlternatives(
'recipient': destinatario.email, subject,
'subject': subject, email_texts[0],
'txt_message': email_texts[0], sender,
'html_message': email_texts[1], [destinatario.email],
}) connection=connection)
enviar_emails(sender, recipients, messages) email.attach_alternative(email_texts[1], "text/html")
email.send()
# Garantia de que, mesmo com o lançamento de qualquer exceção,
# a conexão será fechada
except Exception:
connection.close()
connection.close()

69
sapl/materia/receivers.py

@ -1,16 +1,9 @@
from datetime import datetime
from django.core.mail import send_mass_mail
from django.core.urlresolvers import reverse
from django.dispatch import receiver from django.dispatch import receiver
from sapl.base.models import CasaLegislativa
from sapl.materia.signals import tramitacao_signal from sapl.materia.signals import tramitacao_signal
from sapl.settings import EMAIL_SEND_USER
from sapl.utils import get_base_url from sapl.utils import get_base_url
from .models import AcompanhamentoMateria from .email_utils import do_envia_email_tramitacao
from .email_utils import load_email_templates
@receiver(tramitacao_signal) @receiver(tramitacao_signal)
@ -19,58 +12,8 @@ def handle_tramitacao_signal(sender, **kwargs):
request = kwargs.get("request") request = kwargs.get("request")
materia = tramitacao.materia materia = tramitacao.materia
destinatarios = AcompanhamentoMateria.objects.filter( do_envia_email_tramitacao(
materia=materia, get_base_url(request),
confirmado=True) materia,
tramitacao.status,
casa = CasaLegislativa.objects.first() tramitacao.unidade_tramitacao_destino)
if not casa:
raise ValueError('Casa Legislativa é obrigatória')
# FIXME i18n
casa_nome = (casa.nome + ' de ' +
casa.municipio + '-' +
casa.uf)
sender = EMAIL_SEND_USER
# FIXME i18n
subject = "[SAPL] " + str(materia) + \
" - Acompanhamento de Materia Legislativa"
base_url = get_base_url(request)
url_materia = reverse('sapl.materia:tramitacao_list',
kwargs={'pk': materia.id})
url_excluir = reverse('sapl.materia:acompanhar_excluir',
kwargs={'pk': materia.id})
autores = []
for autoria in materia.autoria_set.all():
autores.append(autoria.autor.nome)
templates = load_email_templates(
['email/tramitacao.txt',
'email/tramitacao.html'],
{"casa_legislativa": casa_nome,
"data_registro": datetime.now().strftime(
"%d/%m/%Y"),
"cod_materia": materia.id,
"logotipo": casa.logotipo,
"descricao_materia": materia.ementa,
"autoria": autores,
"data": tramitacao.data_tramitacao,
"status": tramitacao.status,
"localizacao": tramitacao.unidade_tramitacao_destino,
"texto_acao": tramitacao.texto,
"hash_txt": '',
"materia": str(materia),
"base_url": base_url,
"materia_url": url_materia,
"excluir_url": url_excluir})
lista_emails = destinatarios.values_list('email', flat=True).distinct()
send_mass_mail(
((subject, templates[0], sender, lista_emails),),
fail_silently=True)

Loading…
Cancel
Save