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

Want create site? Find Free WordPress Themes and plugins.
Enviando e-mail com python
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.


Você pode conferir a parte 1 clicando no botão abaixo:
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.
Did you find apk for android? You can find new Free Android Games and apps.

você pode gostar também Mais do autor

Comentários