Enviando um e -mail em Python

Enviando um e -mail em Python
Enviar um email é uma das tarefas mais comuns que preciso fazer nos aplicativos da web e outros projetos que eu crio. Com Python, isso é uma coisa bastante direta e fácil de fazer. Mesmo quando precisamos fazer uso de alguns modelos predefinidos, o Python nos ajuda a substituir os valores dos espaços reservados pelos dados reais, para que o email final pareça elegante e cheio de detalhes, o que deixa meu cliente feliz.

Nesta lição, vou compartilhar o script que uso para enviar e -mails para os usuários dos aplicativos que faço e mais.

O que faremos?

Criaremos um programa Python simples que fará o seguinte:

  • Use o arquivo de modelo que criamos para o design de email. Este será apenas um arquivo baseado em texto com valores de espaço reservado.
  • Obtenha o nome e o email da pessoa de outro arquivo de texto que fazemos.

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

Arquivo para e -mails

O arquivo que contém os e -mails para os usuários ficará assim:

Shubham Shubham.có[email protected]

Este é apenas um arquivo de texto simples que contém o nome e o email do usuário separados pelo espaço. Vários e -mails foram colocados com os dados de cada usuário em uma nova linha. Nomeamos este arquivo Usuários.TXT.

Usando o modelo

Definamos rapidamente o modelo rapidamente, que usaremos em nosso script para substituir valores:

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

Usamos uma string de modelo $ Person_name que será substituído pelo nome da pessoa que obtemos dos usuários.arquivo txt ao enviar o email.

Obtendo dados do usuário do arquivo

A primeira etapa para enviar email para um usuário é identificar que onde queremos enviar os e -mails para. Vamos escrever uma função Python que aceite um nome de arquivo e retornará o nome dos usuários e os IDs de email onde os e -mails precisam ser enviados:

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

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

Obtendo o objeto de modelo

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

def read_template (file_name):
com open (file_name, 'r', coding = 'utf-8') como msg_template:
msg_template_content = msg_template.ler()
Modelo de retorno (msg_template_content)

Com isso, recuperaremos um objeto de modelo que podemos usar para analisar o conteúdo do arquivo e fazer as substituições necessárias para as seqüências de modelos 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 email é realmente enviado ao usuário:

  • Crie conexão SMTP com credenciais de login para a conta do remetente
  • Construa um cabeçalho de várias partes com informações com os campos de, para e sujeitos
  • Construa o corpo da mensagem que precisa ser enviado
  • Envie o email com objeto de conexão SMTP

Configurando a conexão SMTP

Vamos finalmente definir a função que enviará o email para os usuários designados. Aqui está a função:

def main ():
user_name, user_email = get_users_data ('usuários.txt ') # Leia os detalhes do usuário
message_template = read_template ('mensagem.TXT')
# Configure o servidor SMTP
smtplib_server = smtplib.Smtp (host = 'smtp.Gmail.com ', porta = 587)
smtplib_server.startTls ()
smtplib_server.Login (send_from, email_pwd)
# Obtenha detalhes de cada usuário e envie o email:
Para nome, email em zip (user_name, user_email):
Multipart_Message = Mimemultipart () # Crie uma mensagem
# Adicione o nome da pessoa real ao modelo de mensagem
msg = message_template.substituto (pessoa_name = nome.título())
# Imprime o corpo da mensagem para o nosso bem
Imprimir (msg)
# Configure os parâmetros da mensagem
multipart_message ['de'] = send_from
multipart_message ['para'] = email
multipart_message ['sujeito'] = "email de linuxhint"
# Adicione o corpo da mensagem
Multipart_Message.Anexar (Mimetext (Msg, 'Plain')))
# Envie 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.desistir()

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

Programa completo

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

importar smtplib
do modelo de importação de string
do email.MIME.MIMEMULTIPARTA MIMEMUTIPT MIMEMULT
do email.MIME.Importação de texto MIMETEXT
Send_from = 'my-email-here'
Email_pwd = 'my-password here'
def get_users_data (file_name):
user_name = []
user_email = []
com open (file_name, mode = 'r', coding = 'utf-8') como user_file:
para user_info em user_file:
nome de usuário.Anexe (user_info.split () [0])
user_email.Anexe (user_info.split () [1])
retornar user_name, user_email
def read_template (file_name):
com open (file_name, 'r', coding = 'utf-8') como msg_template:
msg_template_content = msg_template.ler()
Modelo de retorno (msg_template_content)
def main ():
user_name, user_email = get_users_data ('usuários.txt ') # Leia os detalhes do usuário
message_template = read_template ('mensagem.TXT')
# Configure o servidor SMTP
smtplib_server = smtplib.Smtp (host = 'smtp.Gmail.com ', porta = 587)
smtplib_server.startTls ()
smtplib_server.Login (send_from, email_pwd)
# Obtenha detalhes de cada usuário e envie o email:
Para nome, email em zip (user_name, user_email):
Multipart_Message = Mimemultipart () # Crie uma mensagem
# Adicione o nome da pessoa real ao modelo de mensagem
msg = message_template.substituto (pessoa_name = nome.título())
# Imprime o corpo da mensagem para o nosso bem
Imprimir (msg)
# Configure os parâmetros da mensagem
multipart_message ['de'] = send_from
multipart_message ['para'] = email
multipart_message ['sujeito'] = "email de linuxhint"
# Adicione o corpo da mensagem
Multipart_Message.Anexar (Mimetext (Msg, 'Plain')))
# Envie 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.desistir()
se __name__ == '__main__':
principal()

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

Erro do Gmail SMTP


Isso ocorre porque o Gmail não permite que scripts simples usem a API do Gmail. Para isso, você pode precisar 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, analisamos como podemos enviar e -mails usando o Python's smtplib módulo.