Ir para conteúdo
Fórum Script Brasil
  • 0

Python Pandas - Dificuldade sobre envio de email para vários destinatários


lucas83mariano

Pergunta

Boa tarde a todos.

Faz pouco mais de uma semana que vim a conhecer o Python através de um intensivão gratuito q rolou no youtube. Eu ainda estou parado na primeira aula tentando realizar esse envio dos emails.

Estou fazendo os testes com uma planilha de excel importada pro python, onde tenho informação de candidatos inscritos e matriculados nos devidos cursos. O teste é fazer uma lista de curso e uma lista de emails (visto q pra cada curso haverá um email diferente para envio), pra então eu disparar esses emails com o resultado de cada curso para seu respectivo coordenador analisar.

Estou usando como guia o código disponibilizado pelo pessoal do curso porém está acontecendo um erro q não sei como solucionar; por isso estou aqui pedindo a ajuda.

Vou colar abaixo as linhas de códigos e no final o erro (servidor de email será o gmail; estou usando o python no google colab):

def enviar_email(resultadocursoemail😞
  import smtplib
  import email.message
 
  server = smtplib.SMTP('smtp.gmail.com:587')  
  corpo_email = f"""
  <p>Teste de e-mail</p>
  <p>Segue o relatório</p>
 
  {resultado.to_html()}
 
  <p>Att.</p>
  <p>Lucas Mariano</p>
  """ #vamos editar
    
  msg = email.message.Message()
  msg['Subject'] = f"Relatório de Matriculados - {curso}" #vamos editar
  msg['From'] = '' #vamos editar
  msg['To'] = email
  password = '' #vamos editar
  msg.add_header('Content-Type''text/html')
  msg.set_payload(corpo_email )
    
  s = smtplib.SMTP('smtp.gmail.com: 587')
  s.starttls()
  # Login Credentials for sending the mail
  s.login(msg['From'], password)
  s.sendmail(msg['From'], [msg['To']], msg.as_string().encode('utf-8'))
  print('Email enviado')
----------------------------------------------------------
lista_cursos=resultados["Curso"].unique()
lista_emails=resultados[["Curso","Email"]].unique()
 
for i, curso in enumerate(lista_cursos):
  resultado = resultados.loc[resultados["Curso"] == curso,["Curso","Inscrição","Matrícula","Email"]]
  resultado = resultado.groupby("Curso").sum()
  resultado["Resultado_Final"]=((resultado["Matrícula"]/resultado["Inscrição"])*100)
  
  enviar_email(resultado,curso,lista_emails[i])
----------------------------------------------------------
Segue o erro:
 
AttributeError                            Traceback (most recent call last)
<ipython-input-18-c918ce88880e> in <module>()
      7   resultado["Resultado_Final"]=((resultado["Matrícula"]/resultado["Inscrição"])*100)
      8 
----> 9   enviar_email(resultado,curso,lista_emails[i])
     10   display(resultado)
     11 


6 frames
<ipython-input-14-d1543f8c0239> in enviar_email(resultado, curso, email)
     26   # Login Credentials for sending the mail
     27   s.login(msg['From'], password)
---> 28   s.sendmail(msg['From'], [msg['To']], msg.as_string().encode('utf-8'))
     29   print('Email enviado')

/usr/lib/python3.6/email/message.py in as_string(self, unixfrom, maxheaderlen, policy)
    156                       maxheaderlen=maxheaderlen,
    157                       policy=policy)
--> 158         g.flatten(self, unixfrom=unixfrom)
    159         return fp.getvalue()
    160 

/usr/lib/python3.6/email/generator.py in flatten(self, msg, unixfrom, linesep)
    114                     ufrom = 'From nobody ' + time.ctime(time.time())
    115                 self.write(ufrom + self._NL)
--> 116             self._write(msg)
    117         finally:
    118             self.policy = old_gen_policy

/usr/lib/python3.6/email/generator.py in _write(self, msg)
    193         meth = getattr(msg, '_write_headers', None)
    194         if meth is None:
--> 195             self._write_headers(msg)
    196         else:
    197             meth(self)

/usr/lib/python3.6/email/generator.py in _write_headers(self, msg)
    220     def _write_headers(self, msg):
    221         for h, v in msg.raw_items():
--> 222             self.write(self.policy.fold(h, v))
    223         # A blank line always separates headers from body
    224         self.write(self._NL)

/usr/lib/python3.6/email/_policybase.py in fold(self, name, value)
    324 
    325         """
--> 326         return self._fold(name, value, sanitize=True)
    327 
    328     def fold_binary(self, name, value):

/usr/lib/python3.6/email/_policybase.py in _fold(self, name, value, sanitize)
    367             if self.max_line_length is not None:
    368                 maxlinelen = self.max_line_length
--> 369             parts.append(h.encode(linesep=self.linesep, maxlinelen=maxlinelen))
    370         parts.append(self.linesep)
    371         return ''.join(parts)

AttributeError: module 'email' has no attribute 'encode'

 

Então, o q estou fazendo de errado?

Editado por lucas83mariano
erro gramatical no título
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
1 hora atrás, ArteEN disse:

começa resolvendo isso

Eu notei esse erro, mas não faço idéia de onde possa estar ocorrendo. O curso é no formato intensivão, ou seja, não é detalhado, ou aprofundado.

O teste q estou fazendo não é com a planilha q ele usou, porque a dele está redondinha .. eu fui logo pegando arquivo q eu costumava usar no trabalho pra treinar, mas aí foram aparecendo muitos "obstáculos"; e esse é um deles.

Link para o comentário
Compartilhar em outros sites

  • 0

use a ferramenta de busca, procure 'encode', nessa linha vai ter a chamada

4 horas atrás, lucas83mariano disse:

s.sendmail(msg['From'], [msg['To']], msg.as_string().encode('utf-8'))

o que você tem que fazer é buscar a documentação oficial do modulo, e ver como você faz o encode da forma correta

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, ArteEN disse:

use a ferramenta de busca, procure 'encode', nessa linha vai ter a chamada

o que você tem que fazer é buscar a documentação oficial do modulo, e ver como você faz o encode da forma correta

Ixa, continua a ser um mistério. O q eu to fazendo é, basicamente, "imitando" os movimentos do pessoal q deu o curso porque não teve conceito, introdução, nem nada .. já foi direto na prática com exemplo e passando linhas de códigos q funcionam em 'n' ocasiões com algumas explicações bem pontuais.

Por exemplo, não sei a diferença do uso de colchete, chave, parênteses, aspas; ou ainda o q você mencionou de "documentação oficial do módulo" e fazer o encode. Todo o código do def do email, assim como das listas e etc, já foram passadas prontas; daí o pedido d ajuda aqui iria nessa direção tb, ou seja, pensando q viria uma dica d linha d código correta.

 

PS.: tenho consciência q o intuito do curso era ser introdutório .. não atoa ele vendeu o "curso completo" ao final da terceira aula .. o conteúdo é beeeem maior.

Link para o comentário
Compartilhar em outros sites

  • 0

recomendo documentação oficial, la tem a apresentação da linguagem, vou passar o link

documentação oficial

veja que tem a sessão tutorial, e muitas outras, recomendo estudar primeiro aqui para depois fazer esse curso ai, se não você só vai ficar nessa de copiar codigo e torcer para funcionar

 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...