Categorias

Android

Games

Notícias Linux

Tutoriais Linux

Vídeos

Tutoriais Linux

28/03/2019 às 08:15

16 min leitura

Avatar Autor
Por Emanuel Negromonte

Usando Python para enviar e-mails (Parte 2 – módulo email)

Sempreupdate Email Phyton

O módulo e-mail é uma biblioteca para manipulação de mensagens de e-mail e outros documentos MIME. Como este módulo já está incluso nas bibliotecas do Python, você não precisará instalar nenhuma biblioteca adicional. Inicialmente criamos um artigo, Python: Como enviar e-mails (Parte 1 – módulo smtp).

Inicialmente, vamos ver os sub-módulos que iremos utilizar do módulo e-mail:
from email import encoders
Útil para quando criamos um payload que não seja um já implementado. Neste caso necessitamos codificar a mensagem.
from email.mime.base import MIMEBase
Classe base para quando desejamos enviar um arquivo não suportado pelas classes já disponíveis. Um exemplo é o envio de arquivos de vídeos.
from email.mime.multipart import MIMEMultipart
Usado para criar uma mensagem MIME multpart.
from email.mime.audio import MIMEAudio
Usado para criar objetos MIME para a maior parte de arquivos de áudio.
from email.mime.image import MIMEImage
Usado para criar objetos MIME para a maior parte de arquivos de imagem.
from email.mime.text import MIMEText
Usado para criar objetos MIME para a maior parte de arquivos de texto.
Agora vamos verificar como criar uma mensagem com cada um desses tipos:
MIMEBase
MIMEBasewith open(‘arquivo.zip’, ‘rb’) as f:
mime = MIMEBase(‘application’, ‘zip’)
 mime.set_payload(f.read())
 encoders.encode_base64(mime)
MIMEMultipart
msg = MIMEMultipart()
msg.attach(arquivo_mime_1)
msg.attach(arquivo_mime_2)]
arquivo_mime deve ser outro subtipo MIME, por exemplo MIMEAudio.
MIMEAudio
with open(‘audio.ogg’, ‘rb’) as f:
 mime = MIMEAudio(f.read(), _subtype=’ogg’)
MIMEImage
with open(‘imagem.png’, ‘rb’) as f:
 mime = MIMEImage(f.read(), _subtype=’png’)
MIMEText
with open(‘pagina.html’) as f:
 mime = MIMEText(f.read(), _subtype=’html’)
Adicionando os dados de envio e recebimento no cabeçalho da mensagem:
msg = MIMEText(‘Exemplo SempreUpdate.’, ‘plain’)
 msg[‘From’] = ‘[email protected]
 msg[‘To’] = ‘, ‘.join([‘[email protected]’])
msg[‘Cc’] = ‘, ‘.join([‘[email protected]’])
 msg[‘Bcc’] = ‘, ‘.join([‘[email protected]’])
msg[‘Reply-To’] = ‘, ‘.join([‘[email protected]’])
msg[‘Subject’] = ‘Assunto’
  • O From indica quem está enviando mensagem.
  • O To indica quem irá receber.
  • O Cc indica quem receberá uma cópia deste email.
  • O Bcc também indica quem receberá uma cópia do email, mas as demais pessoas não irão ver o email dele na lista dos enviados.
  • O Reply-To indica para quem será respondido o email.
  • O Subject é o assunto do email.
Para enviar os objetos MIME via SMTP devemos gerar as mensagens no formato raw, para isto utilizamos o método as_string.
Agora que já possuímos uma noção básica do funcionamento do módulo email, vamos criar um exemplo completo utilizando tudo o que foi visto.
O exemplo abaixo exemplifica o envio de um email HTML:
  1. import smtplib
  2. from email.mime.text import MIMEText
  3. de = ‘[email protected]
  4. para = [‘[email protected]’]
  5. msg = MIMEText(‘Exemplo de email HTML do <b>SempreUpdate<b/>.’, ‘html’, ‘utf-8’)
  6.  msg[‘From’] = de
  7. msg[‘To’] = ‘, ‘.join(para)
  8. msg[‘Subject’] = ‘SempreUpdate’
  9. raw = msg.as_string()
  10. smtp = smtplib.SMTP_SSL(‘smtp.gmail.com’, 465)
  11. smtp.login(‘[email protected]’, ‘suasenha’)
  12. smtp.sendmail(de, para, raw)
  13.  smtp.quit()]
  14. O exemplo abaixo exemplifica o envio de um email HTML com anexo:
  15. [import mimetypes
  16. import os
  17. import smtplib
  18. from email import encoders
  19. from email.mime.audio import MIMEAudio
  20. from email.mime.base import MIMEBase
  21. from email.mime.image import MIMEImage
  22. from email.mime.multipart import MIMEMultipart
  23. from email.mime.text import MIMEText
  24. def adiciona_anexo(msg, filename):
  25.     if not os.path.isfile(filename):
  26.         return
  27.     ctype, encoding = mimetypes.guess_type(filename)
  28.     if ctype is None or encoding is not None:
  29.         ctype = ‘application/octet-stream’
  30.     maintype, subtype = ctype.split(‘/’, 1)
  31.     if maintype == ‘text’:
  32.         with open(filename) as f:
  33.             mime = MIMEText(f.read(), _subtype=subtype)
  34.     elif maintype == ‘image’:
  35.         with open(filename, ‘rb’) as f:
  36.             mime = MIMEImage(f.read(), _subtype=subtype)
  37.     elif maintype == ‘audio’:
  38.         with open(filename, ‘rb’) as f:
  39.             mime = MIMEAudio(f.read(), _subtype=subtype)
  40.     else:
  41.         with open(filename, ‘rb’) as f:
  42.             mime = MIMEBase(maintype, subtype)
  43.             mime.set_payload(f.read())
  44.         encoders.encode_base64(mime)
  45.     mime.add_header(‘Content-Disposition’, ‘attachment’, filename=filename)
  46.     msg.attach(mime)
  47. de = ‘[email protected]
  48. para = [‘[email protected]’]
  49. msg = MIMEMultipart()
  50. msg[‘From’] = de
  51. msg[‘To’] = ‘, ‘.join(para)
  52. msg[‘Subject’] = ‘SempreUpdate’
  53. # Corpo da mensagem
  54. msg.attach(MIMEText(‘Exemplo de email HTML com anexo do &lt;b&gt;SempreUpdate&lt;b/&gt;.’, ‘html’, ‘utf-8’))
  55. # Arquivos anexos.
  56. adiciona_anexo(msg, ‘texto.txt’)
  57. adiciona_anexo(msg, ‘imagem.jpg’)
  58. raw = msg.as_string()
  59. smtp = smtplib.SMTP_SSL(‘smtp.gmail.com’, 465)
  60. smtp.login(‘[email protected]’, ‘suasenha’)
  61. smtp.sendmail(de, para, raw)
  62. smtp.quit()

Com esta biblioteca para manipulação de e-mail, a montagem e o envio de um e-mail ficam bem mais simplificados, não é?

Espero que você tenha gostado e até mais.
Parte deste código foi obtido na documentação do módulo e-mail.

Fundador do SempreUPdate. Acredita no poder do trabalho colaborativo, no GNU/Linux, Software livre e código aberto. É possível tornar tudo mais simples quando trabalhamos juntos, e tudo mais difícil quando nos separamos.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Últimos artigos

Newsletter

Receba nossas atualizações!

Newsletter

Receba nossas atualizações!
  • Este campo é para fins de validação e não deve ser alterado.