Jump to content

Automação de envio de e-mail pelo Gmail não está lendo arquivo com acentos para anexá-los à mensagem


wvieiradev

Postagens Recomendadas

Olá pessoal;

Estou fazendo um código que acesse o meu e-mail no Gmail e envia e-mail automaticamente para uma lista de e-mails com um anexo (um anexo diferente para cada e-mail informado). Ao executar o código ele até envia os e-mails, porém, os anexos que contém acentos ou cifrão no nome ele não está anexando. Por exemplo, os anexos Financeiro. xlsx e Vendas.xlsx estão sendo anexados perfeitamente, porém, os anexos Logística.xlsx e Produção.xlsx não são anexados (o e-mail é enviado com um anexo em txt vazio).

Alguém pode me ajudar a implementar uma correção no código, por favor?

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
import pandas as pd

df_lista_emails = pd.read_excel("Enviar E-mails.xlsx")

def enviar_email():
    p.add_header('Content-Disposition', "attachment; filename= %s" % filename) 
    msg.attach(p) 
    s = smtplib.SMTP('smtp.gmail.com', 587) 
    s.starttls() 
    s.login(fromaddr, "????????????????") #por segurança foram utilizados ? no lugar da senha 
    text = msg.as_string() 
    s.sendmail(fromaddr, toaddr, text) 
    s.quit()

nomes = df_lista_emails['Gerente'].tolist()
setores = df_lista_emails["Relatório"].tolist()
emails = df_lista_emails["E-mail"].tolist()
anexos = []

for setor in setores:
    anexos.append(setor+".xlsx") #o nome do arquivo é o mesmo nome do setor, porém, com a extensão .xlsx
    
i = 0
for email in emails:
    fromaddr = "wvieiradev@gmail.com"
    toaddr = email
    setor = setores[i]
    nome = nomes[i]
        
    msg = MIMEMultipart() 
    msg['From'] = fromaddr 
    msg['To'] = toaddr 
    msg['Subject'] = "Planilha do setor {}".format(setor)
    body = """
    Prezado {};
    Segue anexa planilha do setor {} para sua análise.
    Abraços!
    """.format(nome, setor)
    msg.attach(MIMEText(body, 'plain'))
    
    filename = anexos[i]
    attachment = open(filename, "rb") 
    p = MIMEBase('application', 'octet-stream') 
    p.set_payload((attachment).read()) 
    encoders.encode_base64(p)
    
    enviar_email()
    
    i += 1

print("E-mails enviados com sucesso!")

 

Link to comment
Compartilhe em outros sites

  • Administradores

Olá! 
Meu conhecimento é bem iniciante de phyton, mas espero conseguir te ajudar ok? hehe 😅

Por padrão, essa linguagem interpreta seus programas usando a codificação de caracteres ASCII, então no caso, ela não consegue representar as acentuações. 
Assim, o caminho seria indicar a codificação para utf-8, na primeira linha do seu arquivo. 

Essa documentação vai te ajudar a entender: https://peps.python.org/pep-0263/ 

  • Curtir 1
Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...