Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @app.task
- def enviar_boletos_por_email(user_id, titulos_id, session, reenvio):
- user = Usuario.objects.get(id=user_id)
- empresa = user.empresa
- titulos = Boleto.objects.using(user.banco).filter(
- conta_receber__id__in=titulos_id,
- )
- if not reenvio:
- titulos = titulos.filter(
- email_enviado=False
- )
- titulos_count = titulos.count()
- if empresa.login_smtp is not None and empresa.login_smtp != '':
- email_login = empresa.login_smtp
- else:
- email_login = empresa.email_boleto
- email_sender = empresa.email_boleto
- senha_email = empresa.senha_email
- smtp_server = empresa.smtp_serv
- smtp_port = empresa.smtp_port
- ssl_emp = empresa.ssl
- tls_emp = empresa.tls
- connection = get_connection(
- host=smtp_server,
- port=smtp_port,
- username=email_login,
- password=senha_email,
- use_tls=tls_emp,
- use_ssl=ssl_emp
- )
- try:
- conn = connection.open()
- if conn is False:
- raise Exception
- except Exception as err:
- print(err)
- Mensage(session, 'envio_boletos_email', {
- 'erro': 'Erro ao conectar com o servidor de email.'
- }).send()
- return
- try:
- Mensage(session, 'envio_boletos_email', {'logg':
- 'Realizando login...'
- }).send()
- for count, titulo in enumerate(titulos):
- count += 1
- enviado = False
- while not enviado:
- Mensage(session, 'envio_boletos_email', {
- 'logg': 'Enviando boleto {} de {}...'.format(count, titulos_count)
- }).send()
- try:
- cliente_nome = titulo.conta_receber.conta.cliente.nome
- cliente_nome = format_string_remessa(cliente_nome)
- cliente_email = titulo.conta_receber.conta.cliente.email
- if cliente_email is None or cliente_email == '':
- enviado = True
- continue
- msg_file = MIMEBase('application', 'pdf')
- msg_file.set_payload(titulo.get_pdf_buffer(user))
- encoders.encode_base64(msg_file)
- msg_file.add_header('Content-Disposition', 'attachment', filename='%s' % (
- cliente_nome.split(' ')[0] + '-' +
- cliente_nome.split(' ')[len(cliente_nome.split(' ')) - 1] +
- '-BOLETO-%s.pdf' % (
- date.today().strftime('%Y%m%d'),
- ),
- ))
- message = EmailMessage(
- connection=connection,
- subject=empresa.email_assunto,
- body=empresa.email_msg,
- from_email=email_sender,
- to=[cliente_email.lower()],
- attachments=[msg_file]
- ).send(fail_silently=False)
- enviado = True
- titulo.email_enviado = enviado
- titulo.save()
- time.sleep(2)
- except smtplib.SMTPServerDisconnected as err:
- print("{} - {}".format(str(err), str(type(err))))
- Mensage(session, 'envio_boletos_email', {
- 'logg': 'Desconectado do servidor, restabelecendo conexão...'
- }).send()
- connection.close()
- connection.open()
- except smtplib.SMTPSenderRefused as err:
- print("{} - {}".format(str(err), str(type(err))))
- Mensage(session, 'envio_boletos_email', {
- 'logg': 'Desconectado do servidor, restabelecendo conexão...'
- }).send()
- connection.close()
- connection.open()
- except smtplib.SMTPDataError as err:
- print("{} - {}".format(str(err), str(type(err))))
- if 'quota exceeded' not in str(err) and 'atingiu o limite diario' not in str(err):
- Mensage(session, 'envio_boletos_email', {
- 'erro': 'Erro ao enviar emails...'
- }).send()
- else:
- Mensage(session, 'envio_boletos_email', {
- 'erro': 'Limite diário para envio de emails excedido.'
- }).send()
- connection.close()
- return
- except Exception as err:
- print("{} - {}".format(str(err), str(type(err))))
- Mensage(session, 'envio_boletos_email', {
- 'erro': 'Erro ao enviar boleto {} (Parcela: {} - Cliente: {})...'.format(
- count,
- titulo.conta_receber.id,
- cliente_nome
- )
- }).send()
- connection.close()
- enviado = True
- Mensage(session, 'envio_boletos_email', {'end':
- 'Boletos enviados.'
- }).send()
- except Exception as err:
- print("{} - {}".format(str(err), str(type(err))))
- Mensage(session, 'envio_boletos_email', {'erro':
- 'Erro ao realizar login.'
- }).send()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement