Enviando emails com o Python

Alexandre Vicenzi
· 3 minutos de leitura
Python

Hoje iremos enviar emails com Python. O exemplo mostrado usará o módulo smtplib.

Vale ressaltar que o exemplo é indicado para envio de email mais simples, para enviar email com formatações especiais e anexos é recomendado o uso do módulo email que foi abordado no artigo Formatando e adicionando anexos a e-mails no Python.

O módulo smtplib define um cliente SMTP que pode ser usado para enviar emails tanto via SMTP quanto ESMTP. A smtplib segue os padrões da RFC 821 (SMTP), RFC 1869 (ESMTP), RFC 2554 (Autenticação SMTP) e RFC 2487 (SMTP Seguro via TLS).

Como este módulo já está incluso nas bibliotecas do Python você não precisará instalar nenhuma biblioteca adicional.

Agora que já demos uma boa introdução sobre o módulo smtplib vamos ao que interessa.

Inicialmente vamos importar o módulo:

1
import smtplib

Vamos criar a instância do SMTP de acordo com a forma de autenticação:

TLS

1
2
smtp = smtplib.SMTP('localhost', 587)
smtp.starttls()

SSL

1
smtp = smtplib.SMTP_SSL('localhost', 465)

Sem autenticação

1
smtp = smtplib.SMTP('localhost', 25)

Se escolhemos TLS ou SSL devemos fazer a autenticação:

1
smtp.login('usuário', 'senha')

Caso seja sem autenticação devemos nos identificar enviando o comando EHLO ou HELO:

1
2
3
4
5
6
7
8
# EHLO
smtp.ehlo()

# HELO
smtp.helo()

# De forma genérica. Tenta EHLO primeiro.
smtp.ehlo_or_helo_if_needed()

Não há necessidade de chamar os métodos ehlo ou helo quando se utiliza SSL ou TLS, pois o método login faz a chamada desses métodos caso seja necessário.

Enviando um email:

1
2
3
4
5
6
7
msg = '''From: Seu Nome <[email protected]>
To: [email protected]
Subject: Mensagem do Buteco

Email de teste do Buteco'''

smtp.sendmail('[email protected]', ['[email protected]'], msg)

Note que o segundo parâmetro do método sendmail deve ser uma lista. Mesmo que o destinatário seja apenas um.

Finalizando a sessão SMTP:

1
smtp.quit()

Agora que já sabemos quais partes usar, vamos colocar tudo em prática em um exemplo. No exemplo vou utilizar o Gmail como servidor SMTP, mas você pode utilizar outro de sua preferência.

Abaixo você pode verificar como enviar usando TLS:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import smtplib

smtp = smtplib.SMTP('smtp.gmail.com', 587)
smtp.starttls()

smtp.login('[email protected]', 'suasenha')

de = '[email protected]'
para = ['[email protected]']
msg = """From: %s
To: %s
Subject: Mensagem do Buteco

Email de teste do Buteco.""" % (de, ', '.join(para))

smtp.sendmail(de, para, msg)

smtp.quit()

Já neste outro exemplo você pode verificar como enviar via SSL:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import smtplib

smtp = smtplib.SMTP_SSL('smtp.gmail.com', 465)

smtp.login('[email protected]', 'suasenha')

de = '[email protected]'
para = ['[email protected]']
msg = """From: %s
To: %s
Subject: Mensagem do Buteco

Email de teste do Buteco.""" % (de, ', '.join(para))

smtp.sendmail(de, para, msg)

smtp.quit()

Confira abaixo uma lista dos servidores de email mais comuns e suas configurações.

NomeServidorAutenticaçãoPorta
Gmailsmtp.gmail.comSSL465
Gmailsmtp.gmail.comStartTLS587
Hotmailsmtp.live.comSSL465
Mail.comsmtp.mail.comSSL465
Outlook.comsmtp.live.comStartTLS587
Office365.comsmtp.office365.comStartTLS587
Yahoo Mailsmtp.mail.yahoo.comSSL465

Espero que você tenha gostado desta publicação.

Continue acompanhando que faremos uma continuação falando sobre o módulo email.