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:
- Use o arquivo de modelo que criamos para o design de e-mail. Este será apenas um arquivo baseado em texto com valores de espaço reservado.
- Pegue o nome e e-mail da pessoa de outro arquivo de texto que criamos.
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.comEste é 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:
- Crie uma conexão SMTP com credenciais de login para a conta do remetente
- Construir um cabeçalho de várias partes com informações com os campos De, Para e Assunto
- Construir o corpo da mensagem que precisa ser enviada
- Envie o e-mail com o objeto de conexão SMTP
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 smtplibdo 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.