Created
September 14, 2017 19:40
-
-
Save philippeoz/6dae53d9b3fb2448bdb5efc8edfdc339 to your computer and use it in GitHub Desktop.
Mail Task Celery
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment