Como enviar e-mail com python

Estou no mundo linux a não muito tempo e consigo me virar com shell script mais básico.

Hoje onde eu trabalho sou obrigado a utilizar windows e isso acaba me impedindo de utilizar shell script para algumas funcionalidades como enviar e-mail.

Devido a esse problema e a impossibilidade de instalar linux na minha maquina de trabalho, comecei a estudar python e gostaria de alguma ajuda para enviar e-mail através do python.

Segue abaixo meu script em python porem tentei varias maneiras e nenhuma funciona, utilizo um gmail e se possível alguém de ajudar ficaria agradecido.

Meu script:
import smtplib, ssl

port = 587 # For starttls
smtp_server = “smtp.gmail.com
sender_email = "meu@gmail.com"
receiver_email = “emaildestino”
password = input(“Digite a senha do seu e-mail:”)
message = “”"
Mensagem
alo alo alo"""

context = ssl.create_default_context()
with smtplib.SMTP(smtp_server, port) as server:
server.ehlo() # Can be omitted
server.starttls(context=context)
server.ehlo() # Can be omitted
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message)

Se alguém souber alguma alternativa ou ajuda, obrigado.

Cara… acredito que a melhor maneira de você fazer isso é seguindo a documentação oficial da API do Gmail
https://developers.google.com/gmail/api/quickstart/python

Dá uma olhada talvez ajude.

Olá @Gabriel_Hespanhol

Fiz um teste com o seu código:

import smtplib
import ssl

port = 587  # For starttls
smtp_server = "smtp.gmail.com"
sender_email = "xxxxxx@gmail.com"
receiver_email = "xxxxxx@gmail.com"
password = input("Digite a senha do seu e-mail:")
message = """
Mensagem
alo alo alo
"""

context = ssl.create_default_context()
with smtplib.SMTP(smtp_server, port) as server:
    server.ehlo()  # Can be omitted
    server.starttls(context=context)
    server.ehlo()  # Can be omitted
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, message)

E o mesmo funcionou sem problemas, contudo é importe notar que a conta que você está utilizando para envio dos e-mail não pode ter autenticação de dois fatores ativa e você precisa acessar a url:

https://www.google.com/settings/security/lesssecureapps

Para permitir a utilização de login menos seguro em aplicativos de terceiros:

Após alterar essa configuração o seu código deve funcionar sem problemas e também é possível utilizar códigos sem SSL como:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

msg = MIMEMultipart()

# configurações.
password = 'SENHA DO E-MAIL'
msg['From'] = 'E-MAIL QUE FARÁ O ENVIO'
msg['To'] = 'QUE IRÁ RECEBER O E-MAIL'
msg['Subject'] = 'Assunto da mensagem'

message = 'Texto da mensagem que também pode ser um templates pré formatado.'

# Definindo o tipo da mensagem.
msg.attach(MIMEText(message, 'plain'))

# Criando o servidor.
server = smtplib.SMTP('smtp.gmail.com: 587')

server.starttls()

# Realizando o login
server.login(msg['From'], password)

# Enviando a mensagem.
server.sendmail(msg['From'], msg['To'], msg.as_string())

server.quit()

print(f'Mensagem envida com sucesso para {msg["To"]}')

O único cuidado que você deve ter é caso venha a fazer envio de e-mails em massa, neste caso recomendo que você coloque um sleep() de alguns minutos entre o envio dos e-mails, caso contrario sua conta pode ser considerada um span e ter o envio de mensagens bloqueada por um tempo.

1 Curtida