Pitão

Enviando um e-mail em Python

Enviando um e-mail em Python
Enviar um e-mail é uma das tarefas mais comuns que preciso realizar nos aplicativos da web e em outros projetos que crio. Com Python, isso é bastante simples e fácil de fazer. Mesmo quando precisamos fazer uso de alguns modelos pré-definidos, Python nos ajuda a substituir os valores de espaço reservado por dados reais para que o e-mail final pareça elegante e cheio de detalhes que deixam meu cliente feliz.

Nesta lição, compartilharei o script que uso para enviar e-mails aos usuários dos aplicativos que crio e muito mais.

O que estaremos fazendo?

Criaremos um programa Python simples que fará o seguinte:

Esses pontos tornam este programa muito mais próximo de um uso real de envio de e-mails em seus aplicativos. Vamos começar.

Arquivo para e-mails

O arquivo que contém os e-mails para os usuários terá a seguinte aparência:

Shubham Shubham.code @ gmail.com

Este é apenas um arquivo de texto simples que contém o nome do usuário e e-mail separados por espaço. Vários e-mails foram colocados com os dados de cada usuário em uma nova linha. Nós nomeamos este arquivo Comercial.TXT.

Usando o modelo

Vamos definir rapidamente também o modelo que usaremos em nosso script para substituir valores:

Olá $ PERSON_NAME,
Enviamos este e-mail usando o módulo smtplib do Python. Legal certo?
Tenha um dia brilhante pela frente!
Saúde

Usamos um modelo de string $ PERSON_NAME que será substituído pelo nome da pessoa que recebemos dos usuários.arquivo txt ao enviar o e-mail.

Obtendo dados do usuário do arquivo

A primeira etapa para enviar e-mail a um usuário é identificar para onde queremos enviar os e-mails. Vamos escrever uma função Python que aceitará um nome de arquivo e nos retornará o nome de usuário e IDs de e-mail para onde os e-mails devem ser enviados:

def get_users_data (file_name):
user_name = []
user_email = []
com open (file_name, mode = 'r', encoding = 'utf-8') como user_file:
para user_info em user_file:
nome do usuário.append (user_info.dividir () [0])
user_email.append (user_info.dividir () [1])
retornar user_name, user_email

Com esta função, apenas retornamos os nomes e e-mails do usuário que obtemos do arquivo.

Obtendo o objeto de modelo

Agora, podemos analisar nosso modelo e obter um objeto de modelo do arquivo de texto que criamos:

def read_template (file_name):
com open (file_name, 'r', encoding = 'utf-8') como msg_template:
msg_template_content = msg_template.leitura()
return Template (msg_template_content)

Com isso, vamos obter de volta um objeto Template que podemos usar para analisar o conteúdo do arquivo e fazer as substituições necessárias para as strings do template, como o nome de um usuário.

Como o envio de e-mail é feito?

Agora que estamos prontos com o design do modelo e os dados do usuário, precisamos entender como um e-mail é realmente enviado ao usuário:

Configurando a conexão SMTP

Definamos finalmente a função que enviará o e-mail aos usuários designados. Aqui está a função:

def main ():
user_name, user_email = get_users_data ('usuários.txt ') # ler detalhes do usuário
message_template = read_template ('mensagem.TXT')
# configurar o servidor SMTP
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', porta = 587)
smtplib_server.starttls ()
smtplib_server.login (SEND_FROM, EMAIL_PWD)
# Obtenha os detalhes de cada usuário e envie o e-mail:
para nome, e-mail em zip (user_name, user_email):
multipart_message = MIMEMultipart () # criar uma mensagem
# adicione o nome da pessoa real ao modelo de mensagem
msg = message_template.substituto (PERSON_NAME = nome.título())
# Imprime o corpo da mensagem por nossa causa
imprimir (msg)
# configurar os parâmetros da mensagem
multipart_message ['De'] = SEND_FROM
multipart_message ['To'] = email
multipart_message ['Assunto'] = "LinuxHint Email"
# adicionar no corpo da mensagem
multipart_message.anexar (MIMEText (msg, 'simples'))
# envia a mensagem através do servidor configurado anteriormente.
smtplib_server.send_message (multipart_message)
del multipart_message
# Encerre a sessão SMTP e feche a conexão
smtplib_server.Sair()

Na função acima, seguimos cada etapa declarada na seção anterior. Construímos a conexão SMTP e a usamos para enviar o e-mail.

Programa completo

Na seção final, vamos dar uma olhada no programa completo que pode ser usado para enviar o e-mail ao usuário designado:

importar smtplib
do modelo de importação de string
do email.mímica.importação de várias partes MIMEMultipart
do email.mímica.importação de texto MIMEText
SEND_FROM = 'meu-email-aqui'
EMAIL_PWD = 'minha-senha-aqui'
def get_users_data (file_name):
user_name = []
user_email = []
com open (file_name, mode = 'r', encoding = 'utf-8') como user_file:
para user_info em user_file:
nome do usuário.append (user_info.dividir () [0])
user_email.append (user_info.dividir () [1])
retornar user_name, user_email
def read_template (file_name):
com open (file_name, 'r', encoding = 'utf-8') como msg_template:
msg_template_content = msg_template.leitura()
return Template (msg_template_content)
def main ():
user_name, user_email = get_users_data ('usuários.txt ') # ler detalhes do usuário
message_template = read_template ('mensagem.TXT')
# configurar o servidor SMTP
smtplib_server = smtplib.SMTP (host = 'smtp.gmail.com ', porta = 587)
smtplib_server.starttls ()
smtplib_server.login (SEND_FROM, EMAIL_PWD)
# Obtenha os detalhes de cada usuário e envie o e-mail:
para nome, e-mail em zip (user_name, user_email):
multipart_message = MIMEMultipart () # criar uma mensagem
# adicione o nome da pessoa real ao modelo de mensagem
msg = message_template.substituto (PERSON_NAME = nome.título())
# Imprime o corpo da mensagem por nossa causa
imprimir (msg)
# configurar os parâmetros da mensagem
multipart_message ['De'] = SEND_FROM
multipart_message ['To'] = email
multipart_message ['Assunto'] = "LinuxHint Email"
# adicionar no corpo da mensagem
multipart_message.anexar (MIMEText (msg, 'simples'))
# envia a mensagem através do servidor configurado anteriormente.
smtplib_server.send_message (multipart_message)
del multipart_message
# Encerre a sessão SMTP e feche a conexão
smtplib_server.Sair()
if __name__ == '__main__':
a Principal()

Quando executamos este programa com um ID do Gmail, você pode enfrentar um problema como este:

Erro SMTP do Gmail


Isso ocorre porque o Gmail não permite que scripts simples usem a API do Gmail. Para isso, pode ser necessário desativar o login de segurança em sua conta do Gmail. Leia sobre como fazer isso para o Gmail aqui.

Conclusão

Nesta lição, vimos como podemos enviar e-mails usando o Python smtplib módulo.

Melhores jogos de linha de comando para Linux
A linha de comando não é apenas sua maior aliada ao usar o Linux - ela também pode ser uma fonte de entretenimento porque você pode usá-la para jogar ...
Melhores aplicativos de mapeamento de gamepad para Linux
Se você gosta de jogar no Linux com um gamepad em vez de um teclado típico e sistema de entrada de mouse, existem alguns aplicativos úteis para você. ...
Ferramentas úteis para jogadores de Linux
Se você gosta de jogar no Linux, é provável que tenha usado aplicativos e utilitários como Wine, Lutris e OBS Studio para melhorar a experiência de jo...