diff --git a/sapl/base/email_utils.py b/sapl/base/email_utils.py index f5ea0825d..024045edd 100644 --- a/sapl/base/email_utils.py +++ b/sapl/base/email_utils.py @@ -1,7 +1,6 @@ from datetime import datetime as dt import logging -from django.conf import settings from django.core.mail import EmailMultiAlternatives, get_connection, send_mail from django.core.urlresolvers import reverse from django.template import Context, loader @@ -11,6 +10,7 @@ from sapl.base.models import CasaLegislativa from sapl.materia.models import AcompanhamentoMateria from sapl.protocoloadm.models import AcompanhamentoDocumento from sapl.settings import EMAIL_SEND_USER +from sapl.utils import mail_service_configured def load_email_templates(templates, context={}): @@ -114,7 +114,7 @@ def do_envia_email_confirmacao(base_url, casa, tipo, doc_mat, destinatario): # Envia email de confirmacao para atualizações de tramitação # - if not settings.EMAIL_HOST: + if not mail_service_configured(): logger = logging.getLogger(__name__) logger.warning(_('Servidor de email não configurado.')) return @@ -208,7 +208,7 @@ def do_envia_email_tramitacao(base_url, tipo, doc_mat, status, unidade_destino): # Envia email de tramitacao para usuarios cadastrados # - if not settings.EMAIL_HOST: + if not mail_service_configured(): logger = logging.getLogger(__name__) logger.warning(_('Servidor de email não configurado.')) return diff --git a/sapl/base/views.py b/sapl/base/views.py index 93df03811..7a30bc15a 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -33,7 +33,7 @@ from sapl.materia.models import (Autoria, MateriaLegislativa, from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria, SessaoPlenariaPresenca) from sapl.utils import (parlamentares_ativos, - show_results_filter_set) + show_results_filter_set, mail_service_configured) from .forms import (AlterarSenhaForm, CasaLegislativaForm, ConfiguracoesAppForm, RelatorioAtasFilterSet, @@ -171,15 +171,14 @@ class AutorCrud(CrudAux): url_reverse = reverse('sapl.base:autor_detail', kwargs={'pk': pk_autor}) - if not settings.EMAIL_HOST: + if not mail_service_configured(): self.logger.warning(_('Registro de Autor sem envio de email. ' 'Servidor de email não configurado.')) return url_reverse try: - - self.logger.debug('user=' + username + - '. Enviando email na edição de Autores.') + self.logger.debug('user={}. Enviando email na edição ' + 'de Autores.'.format(username)) kwargs = {} user = self.object.user @@ -207,8 +206,8 @@ class AutorCrud(CrudAux): send_mail(assunto, mensagem, remetente, destinatario, fail_silently=False) except Exception as e: - self.logger.error( - 'user=' + username + '. Erro no envio de email na edição de Autores. ' + str(e)) + self.logger.error('user={}. Erro no envio de email na edição de' + ' Autores. {}'.format(username, str(e))) return url_reverse @@ -233,7 +232,7 @@ class AutorCrud(CrudAux): url_reverse = reverse('sapl.base:autor_detail', kwargs={'pk': pk_autor}) - if not settings.EMAIL_HOST: + if not mail_service_configured(): self.logger.warning(_('Registro de Autor sem envio de email. ' 'Servidor de email não configurado.')) return url_reverse diff --git a/sapl/context_processors.py b/sapl/context_processors.py index 683920006..c0aa7a1bf 100644 --- a/sapl/context_processors.py +++ b/sapl/context_processors.py @@ -4,6 +4,7 @@ from django.conf import settings from django.utils.translation import ugettext_lazy as _ from sapl.base.views import get_casalegislativa +from sapl.utils import mail_service_configured as mail_service_configured_utils def parliament_info(request): @@ -16,7 +17,7 @@ def parliament_info(request): def mail_service_configured(request): - if not settings.EMAIL_HOST: + if not mail_service_configured_utils(): logger = logging.getLogger(__name__) logger.warning(_('Servidor de email não configurado.')) return {'mail_service_configured': False} diff --git a/sapl/materia/views.py b/sapl/materia/views.py index c8cd32934..8c1d0bc5d 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -48,7 +48,7 @@ from sapl.protocoloadm.models import Protocolo from sapl.utils import (YES_NO_CHOICES, autor_label, autor_modal, SEPARADOR_HASH_PROPOSICAO, gerar_hash_arquivo, get_base_url, get_mime_type_from_file_extension, montar_row_autor, - show_results_filter_set) + show_results_filter_set, mail_service_configured) from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AdicionarVariasAutoriasFilterSet, DespachoInicialForm, @@ -1822,7 +1822,7 @@ class AcompanhamentoMateriaView(CreateView): return ''.join(choice(s) for i in range(choice([6, 7]))) def get(self, request, *args, **kwargs): - if not settings.EMAIL_HOST: + if not mail_service_configured(): self.logger.warning(_('Servidor de email não configurado.')) messages.error(request, _('Serviço de Acompanhamento de ' 'Matérias não foi configurado')) diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 2772ed208..1d68dfce2 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -33,7 +33,7 @@ from sapl.parlamentares.models import Legislatura, Parlamentar from sapl.protocoloadm.models import Protocolo from sapl.utils import (create_barcode, get_base_url, get_client_ip, get_mime_type_from_file_extension, - show_results_filter_set) + show_results_filter_set, mail_service_configured) from .forms import (AcompanhamentoDocumentoForm, AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm, @@ -186,7 +186,7 @@ class AcompanhamentoDocumentoView(CreateView): return ''.join(choice(s) for i in range(choice([6, 7]))) def get(self, request, *args, **kwargs): - if not settings.EMAIL_HOST: + if not mail_service_configured(): self.logger.warning(_('Servidor de email não configurado.')) messages.error(request, _('Serviço de Acompanhamento de ' 'Documentos não foi configurado')) @@ -200,7 +200,7 @@ class AcompanhamentoDocumentoView(CreateView): 'documento': documento}) def post(self, request, *args, **kwargs): - if not settings.EMAIL_HOST: + if not mail_service_configured(): self.logger.warning(_('Servidor de email não configurado.')) messages.error(request, _('Serviço de Acompanhamento de ' 'Documentos não foi configurado')) diff --git a/sapl/settings.py b/sapl/settings.py index 9731da1bf..0c3f9935e 100755 --- a/sapl/settings.py +++ b/sapl/settings.py @@ -225,6 +225,7 @@ EMAIL_USE_TLS = config('EMAIL_USE_TLS', cast=bool, default=True) EMAIL_SEND_USER = config('EMAIL_SEND_USER', cast=str, default='') DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL', cast=str, default='') SERVER_EMAIL = config('SERVER_EMAIL', cast=str, default='') +EMAIL_RUNNING = None MAX_DOC_UPLOAD_SIZE = 60 * 1024 * 1024 # 60MB MAX_IMAGE_UPLOAD_SIZE = 2 * 1024 * 1024 # 2MB diff --git a/sapl/utils.py b/sapl/utils.py index 5c8d6e097..9bd3002f4 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -15,6 +15,7 @@ from django.contrib import admin from django.contrib.contenttypes.fields import (GenericForeignKey, GenericRel, GenericRelation) from django.core.exceptions import ValidationError +from django.core.mail import get_connection from django.db.models import Q from django.utils import six, timezone from django.utils.translation import ugettext_lazy as _ @@ -28,11 +29,13 @@ from unipath.path import Path from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row + # (26/10/2018): O separador foi mudador de '/' para 'K' # por conta dos leitores de códigos de barra, que trocavam # a '/' por '&' ou ';' SEPARADOR_HASH_PROPOSICAO = 'K' + def pil_image(source, exif_orientation=False, **options): return source_generators.pil_image(source, exif_orientation, **options) @@ -767,3 +770,16 @@ def RemoveTag(texto): def remover_acentos(string): return unicodedata.normalize('NFKD', string).encode('ASCII', 'ignore').decode() + + +def mail_service_configured(request=None): + result = True + try: + connection = get_connection() + connection.open() + except Exception as e: + result = False + print(e) + finally: + connection.close() + return result \ No newline at end of file