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(resultado, curso, email😞
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?