in

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

Aumente as possibilidades usando o Python, envie e-mails usando apenas 1 módulo!

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:
import smtplib
from email.mime.text import MIMEText
de = ‘[email protected]
para = [‘[email protected]’]
msg = MIMEText(‘Exemplo de email HTML do <b>SempreUpdate<b/>.’, ‘html’, ‘utf-8’)
 msg[‘From’] = de
msg[‘To’] = ‘, ‘.join(para)
msg[‘Subject’] = ‘SempreUpdate’
raw = msg.as_string()
smtp = smtplib.SMTP_SSL(‘smtp.gmail.com’, 465)
smtp.login(‘[email protected]’, ‘suasenha’)
smtp.sendmail(de, para, raw)
 smtp.quit()]
O exemplo abaixo exemplifica o envio de um email HTML com anexo:
[import mimetypes
import os
import smtplib
from email import encoders
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def adiciona_anexo(msg, filename):
    if not os.path.isfile(filename):
        return
    ctype, encoding = mimetypes.guess_type(filename)
    if ctype is None or encoding is not None:
        ctype = ‘application/octet-stream’
    maintype, subtype = ctype.split(‘/’, 1)
    if maintype == ‘text’:
        with open(filename) as f:
            mime = MIMEText(f.read(), _subtype=subtype)
    elif maintype == ‘image’:
        with open(filename, ‘rb’) as f:
            mime = MIMEImage(f.read(), _subtype=subtype)
    elif maintype == ‘audio’:
        with open(filename, ‘rb’) as f:
            mime = MIMEAudio(f.read(), _subtype=subtype)
    else:
        with open(filename, ‘rb’) as f:
            mime = MIMEBase(maintype, subtype)
            mime.set_payload(f.read())
        encoders.encode_base64(mime)
    mime.add_header(‘Content-Disposition’, ‘attachment’, filename=filename)
    msg.attach(mime)
de = ‘[email protected]
para = [‘[email protected]’]
msg = MIMEMultipart()
msg[‘From’] = de
msg[‘To’] = ‘, ‘.join(para)
msg[‘Subject’] = ‘SempreUpdate’
# Corpo da mensagem
msg.attach(MIMEText(‘Exemplo de email HTML com anexo do &lt;b&gt;SempreUpdate&lt;b/&gt;.’, ‘html’, ‘utf-8’))
# Arquivos anexos.
adiciona_anexo(msg, ‘texto.txt’)
adiciona_anexo(msg, ‘imagem.jpg’)
raw = msg.as_string()
smtp = smtplib.SMTP_SSL(‘smtp.gmail.com’, 465)
smtp.login(‘[email protected]’, ‘suasenha’)
smtp.sendmail(de, para, raw)
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.

Written by Emanuel Negromonte

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.

Python: Como enviar e-mails (Parte 1 – módulo smtp)

brasil-tts-sintetizador-voz-em-portugues-para-deficientes-visuais-linux

Conheça o Brasil TTS! Um sintetizador voz em português voltado para deficientes visuais que usam Linux!