Last active
July 14, 2022 16:53
-
-
Save nosrednawall/61e7e0dd54de1a1c861b379b27c7dfed to your computer and use it in GitHub Desktop.
Monta Estrutura MIME email
This file contains 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
def monta_estrutura_email(subject, email_from, email_to, msg_html, msg_plain, lista_anexos): | |
message = MIMEMultipart("mixed") | |
message["Subject"] = subject | |
message["From"] = email_from | |
message["To"] = email_to | |
related_body = MIMEMultipart("related") | |
if len(lista_anexos) > abs(0): | |
for part in lista_anexos: | |
related_body.attach(part) | |
message_body = MIMEMultipart("alternative") | |
part1 = MIMEText(msg_plain, _subtype='plain', _charset='utf-8') | |
part2 = MIMEText(msg_html, _subtype='html', _charset='utf-8') | |
message_body.attach(part1) | |
message_body.attach(part2) | |
message.attach(message_body) | |
message.attach(related_body) | |
return message | |
def monta_anexo_pdf(pdfname, caminho): | |
logger = Log.get_logger() # Busca a instancia do logger | |
try: | |
with open(caminho, 'rb') as fp: | |
anexo_pdf = MIMEBase("application", "pdf", Name=pdfname) | |
anexo_pdf.set_payload(fp.read()) | |
encoders.encode_base64(anexo_pdf) | |
anexo_pdf.add_header( | |
"Content-Disposition", | |
f"attachment; filename= {pdfname}", | |
) | |
except Exception as e: | |
logger.error(f'Ocorreu um erro ao carregar o anexo Anexos/201911-001 Aos Fornecedores - ' | |
f'Documento Fiscal eletrônico - rv01.pdf, erro:{e}') | |
anexo_pdf = False | |
return anexo_pdf | |
def monta_anexo_imagem(caminho, nome_imagem): | |
logger = Log.get_logger() # Busca a instancia do logger | |
try: | |
with open(caminho, 'rb') as fp: | |
anexo_imagem = MIMEBase("application", "octet-stream") | |
anexo_imagem.set_payload(fp.read()) | |
encoders.encode_base64(anexo_imagem) | |
anexo_imagem.add_header( | |
"Content-Disposition", | |
f"attachment; filename= {nome_imagem}", | |
) | |
except Exception as e: | |
logger.error(f'Ocorreu um erro ao carregar arquivo Anexos/exemploXML.jpg, erro {e}') | |
anexo_imagem = False | |
return anexo_imagem | |
def monta_anexo_xml(arquivo_xml, xmlname): | |
xml_encode = arquivo_xml.encode('utf-8') | |
anexo_xml = MIMEBase("application", "octet-stream") | |
anexo_xml.set_payload(xml_encode) | |
encoders.encode_base64(anexo_xml) | |
anexo_xml.add_header( | |
"Content-Disposition", | |
f"attachment; filename= {xmlname}", | |
) | |
return anexo_xml | |
def envia_email_recusa(lista_erros, arquivo_xml, informacoes, destinatario): | |
# logger = Log.get_logger() # instancia o logger | |
# busca as credenciais do servidor | |
credenciais = busca_credenciais_email() | |
# busca uma lista de destinatios | |
destinatarios = busca_destinatarios() | |
# adiciona o email do fornecedor a lista | |
destinatarios.append(destinatario) | |
# cria uma string de destinatarios | |
string_destinatarios = '' | |
for dest in destinatarios: | |
if string_destinatarios == '': | |
string_destinatarios = dest | |
else: | |
string_destinatarios = string_destinatarios + ',' + dest | |
# monta os corpos da mensagem | |
corpos_mensagem = monta_mensagem_html() | |
lista_anexos = [] | |
anexo_pdf = monta_anexo_pdf( | |
caminho=r'Anexos/arquivo_pdf.pdf', | |
pdfname=r'arquivo_pdf.pdf') | |
if anexo_pdf: | |
lista_anexos.append(anexo_pdf) | |
anexo_imagem = monta_anexo_imagem( | |
caminho=r'Anexos/exemploXML.jpg', | |
nome_imagem=r'exemploXML.jpg') | |
if anexo_imagem: | |
lista_anexos.append(anexo_imagem) | |
# adiciona os anexos carregados a mensagem | |
anexo_xml = monta_anexo_xml(arquivo_xml=arquivo_xml.get('xml'), | |
xmlname=arquivo_xml.get('filename')) | |
lista_anexos.append(anexo_xml) | |
message = monta_estrutura_email( | |
subject="Email ral), | |
email_from=credenciais, | |
email_to=string_destinatarios, | |
msg_html=corpos_mensagem.get('HTML'), | |
msg_plain=corpos_mensagem.get('PLAIN'), | |
lista_anexos=lista_anexos | |
) | |
# cria uma conexao com o servidor e envia mensagem | |
with smtplib.SMTP(credenciais.get('SERVIDOR'), 587) as server: | |
# Login com servidor | |
server.ehlo() | |
server.starttls() | |
server.login(credenciais.get('USUARIO'), credenciais.get('SENHA')) | |
print('Enviando mensagem...') | |
server.sendmail(credenciais.get('USUARIO'), | |
destinatarios, | |
message.as_string()) | |
print('Mensagem enviada!') | |
server.quit() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment