Jump to content
Fórum Script Brasil
  • 0

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


Question

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?

Edited by lucas83mariano
erro gramatical no título
Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148954
    • Total Posts
      645014
×
×
  • Create New...