From fea58ab2eced9defae3b34c24a7be52d2641ee97 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Wed, 14 Jun 2017 10:34:27 -0300 Subject: [PATCH] =?UTF-8?q?Abre=20uma=20s=C3=B3=20conex=C3=A3o=20para=20m?= =?UTF-8?q?=C3=BAltiplos=20emails?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/email_utils.py | 52 ++++++++++++++++++---------- sapl/materia/receivers.py | 69 ++++--------------------------------- 2 files changed, 40 insertions(+), 81 deletions(-) diff --git a/sapl/materia/email_utils.py b/sapl/materia/email_utils.py index c2cad29d3..55770987a 100644 --- a/sapl/materia/email_utils.py +++ b/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.template import Context, loader +from sapl.base.models import CasaLegislativa from sapl.settings import EMAIL_SEND_USER +from .models import AcompanhamentoMateria + + def load_email_templates(templates, context={}): emails = [] @@ -16,7 +22,6 @@ def load_email_templates(templates, context={}): return emails - def enviar_emails(sender, recipients, messages): ''' 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 subject = "[SAPL] " + str(materia) + \ " - Acompanhamento de Materia Legislativa" - messages = [] - recipients = [] + + connection = get_connection() + connection.open() + for destinatario in destinatarios: - email_texts = criar_email_tramitacao(base_url, - casa, - materia, - status, - unidade_destino, - destinatario.hash,) - recipients.append(destinatario.email) - messages.append({ - 'recipient': destinatario.email, - 'subject': subject, - 'txt_message': email_texts[0], - 'html_message': email_texts[1], - }) - enviar_emails(sender, recipients, messages) + try: + email_texts = criar_email_tramitacao(base_url, + casa, + materia, + status, + unidade_destino, + destinatario.hash,) + + email = EmailMultiAlternatives( + subject, + email_texts[0], + sender, + [destinatario.email], + connection=connection) + 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() diff --git a/sapl/materia/receivers.py b/sapl/materia/receivers.py index 8e1a196c8..31f353fe0 100644 --- a/sapl/materia/receivers.py +++ b/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 sapl.base.models import CasaLegislativa from sapl.materia.signals import tramitacao_signal -from sapl.settings import EMAIL_SEND_USER from sapl.utils import get_base_url -from .models import AcompanhamentoMateria -from .email_utils import load_email_templates +from .email_utils import do_envia_email_tramitacao @receiver(tramitacao_signal) @@ -19,58 +12,8 @@ def handle_tramitacao_signal(sender, **kwargs): request = kwargs.get("request") materia = tramitacao.materia - destinatarios = AcompanhamentoMateria.objects.filter( - materia=materia, - confirmado=True) - - casa = CasaLegislativa.objects.first() - - 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) + do_envia_email_tramitacao( + get_base_url(request), + materia, + tramitacao.status, + tramitacao.unidade_tramitacao_destino)