def do_envia_email_confirmacao(base_url, casa, tipo, doc_mat, destinatario): # # Envia email de confirmacao para atualizações de tramitação # logger = logging.getLogger(__name__) if not mail_service_configured(): logger.warning(_('Servidor de email não configurado.')) return sender = EMAIL_SEND_USER # FIXME i18n if tipo == "materia": msg = " - Ative o Acompanhamento da Matéria" else: msg = " - Ative o Acompanhamento de Documento" subject = "[SAPL] {} {}".format(str(doc_mat), msg) messages = [] recipients = [] email_texts = criar_email_confirmacao(base_url, casa, doc_mat, tipo, 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)
def do_envia_email_tramitacao(base_url, tipo, doc_mat, status, unidade_destino): # # Envia email de tramitacao para usuarios cadastrados # logger = logging.getLogger(__name__) if not mail_service_configured(): logger.warning(_('Servidor de email não configurado.')) return if tipo == "materia": destinatarios = AcompanhamentoMateria.objects.filter(materia=doc_mat, confirmado=True) else: destinatarios = AcompanhamentoDocumento.objects.filter( documento=doc_mat, confirmado=True) if not destinatarios: logger.debug( _('Não existem destinatários cadastrados para essa matéria.')) return casa = CasaLegislativa.objects.first() sender = EMAIL_SEND_USER # FIXME i18nn if tipo == "materia": msg = " - Acompanhamento de Matéria Legislativa" else: msg = " - Acompanhamento de Documento" subject = "[SAPL] {} {}".format(str(doc_mat), msg) connection = get_connection() connection.open() for destinatario in destinatarios: try: email_texts = criar_email_tramitacao(base_url, casa, tipo, doc_mat, 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() raise Exception( 'Erro ao enviar e-mail de acompanhamento de matéria.') connection.close()
def get_success_url(self): username = self.request.user.username pk_autor = self.object.id url_reverse = reverse('sapl.base:autor_detail', kwargs={'pk': pk_autor}) 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='******'. Enviando email na criação de Autores.') kwargs = {} user = self.object.user if not user: return url_reverse kwargs['token'] = default_token_generator.make_token(user) kwargs['uidb64'] = urlsafe_base64_encode(force_bytes(user.pk)) assunto = "SAPL - Confirmação de Conta" full_url = self.request.get_raw_uri() url_base = full_url[:full_url.find('sistema') - 1] mensagem = ( "Este e-mail foi utilizado para fazer cadastro no " + "SAPL com o perfil de Autor. Agora você pode " + "criar/editar/enviar Proposições.\n" + "Seu nome de usuário é: " + self.request.POST['username'] + "\n" "Caso você não tenha feito este cadastro, por favor " + "ignore esta mensagem. Caso tenha, clique " + "no link abaixo\n" + url_base + reverse('sapl.base:confirmar_email', kwargs=kwargs)) remetente = settings.EMAIL_SEND_USER destinatario = [user.email] send_mail(assunto, mensagem, remetente, destinatario, fail_silently=False) except Exception as e: print(_('Erro no envio de email na criação de Autores.')) self.logger.error( 'user='******'. Erro no envio de email na criação de Autores. ' + str(e)) return url_reverse
def get(self, request, *args, **kwargs): 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')) return redirect('/') pk = self.kwargs['pk'] documento = DocumentoAdministrativo.objects.get(id=pk) return self.render_to_response( {'form': AcompanhamentoDocumentoForm(), 'documento': documento})
def post(self, request, *args, **kwargs): 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')) return redirect('/') form = AcompanhamentoDocumentoForm(request.POST) pk = self.kwargs['pk'] documento = DocumentoAdministrativo.objects.get(id=pk) if form.is_valid(): email = form.cleaned_data['email'] usuario = request.user hash_txt = self.get_random_chars() acompanhar = AcompanhamentoDocumento.objects.get_or_create( documento=documento, email=form.data['email']) # Se o segundo elemento do retorno do get_or_create for True # quer dizer que o elemento não existia if acompanhar[1]: acompanhar = acompanhar[0] acompanhar.hash = hash_txt acompanhar.usuario = usuario.username acompanhar.confirmado = False acompanhar.save() base_url = get_base_url(request) destinatario = AcompanhamentoDocumento.objects.get( documento=documento, email=email, confirmado=False) casa = CasaLegislativa.objects.first() do_envia_email_confirmacao(base_url, casa, "documento", documento, destinatario) self.logger.info('user={} .Foi enviado um e-mail de confirmação. Confira sua caixa ' 'de mensagens e clique no link que nós enviamos para ' 'confirmar o acompanhamento deste documento.'.format(usuario.username)) msg = _('Foi enviado um e-mail de confirmação. Confira sua caixa \ de mensagens e clique no link que nós enviamos para \ confirmar o acompanhamento deste documento.') messages.add_message(request, messages.SUCCESS, msg) # Caso esse Acompanhamento já exista # avisa ao usuário que esse documento já está sendo acompanhado else: self.logger.info('user='******'. Este e-mail já está acompanhando esse documento (pk={}).'.format(pk)) msg = _('Este e-mail já está acompanhando esse documento.') messages.add_message(request, messages.INFO, msg) return self.render_to_response( {'form': form, 'documento': documento, 'error': _('Esse documento já está\ sendo acompanhada por este e-mail.')}) return HttpResponseRedirect(self.get_success_url()) else: return self.render_to_response( {'form': form, 'documento': documento})