Enviando e -mails com Python

Enviando e -mails com Python
Enviar, verificar e responder a e -mails é uma tarefa demorada, especialmente quando você está fazendo isso para um grande número de pessoas ou clientes, onde você só precisa alterar o nome, endereço, idade e outras pequenas coisas do destinatário. Seria uma tarefa muito difícil para você escrever um programa que poderia lidar com todos os tipos de seus e -mails pessoais/comerciais, mas ainda assim você pode automatizar muitas coisas nesse sentido que acabarão economizando muito tempo.

Por exemplo, você deseja enviar um lembrete para seus clientes para as contas restantes e você tem todos os dados relacionados ao cliente, como números de telefone, endereço, idade etc. em uma folha do Excel ou em um banco de dados, em vez de fazê -lo manualmente, você pode escrever um programa simples em python para fazer isso automaticamente para você. Neste tutorial, aprenderemos como o protocolo de e -mail funciona e como você pode automatizar o processo para salvar seu tempo precioso.

Uma palavra sobre smtp

O Simple Mail Transfer Protocol (SMTP) é computadorizado equivalente ao seu serviço postal. É um protocolo que funciona na camada de aplicação de uma rede TCP/IP. É um protocolo padrão para enviar e receber e -mails pela Internet. O processo de transferência de correio consiste em servidores de email e clientes enviando e recebendo e -mails um para o outro.

Por exemplo, você tem uma conta do Gmail e deseja enviar um e -mail para seu amigo em sua conta do Yahoo. Você escreve um e -mail e pressiona o envio, mas o processo de back -end é um pouco complicado e, para entender esse processo, você terá que entender o SMTP primeiro. Seu cliente de e -mail SMTP envia primeiro OLÁ (ou Ehlo) para o servidor Gmail, você pode dizer que este comando ou cabeçalho é equivalente a Hospedar Cabeçalho no protocolo HTTP e é usado para identificar o servidor usando o nome do domínio. Depois de Helo ou Ehlo, o cliente se autentica ao servidor com o nome de usuário e a senha dado usando Auth comando. Em seguida, ele especifica o endereço de e -mail do remetente e do destinatário e depois o corpo da mensagem e envia email para o servidor Gmail. O servidor do Gmail confirmará primeiro que se o endereço de e -mail do destinatário no Yahoo existe ou não, então ele enviará o email para o servidor Yahoo, onde o destinatário pode recuperar seus e -mails de.

Smtplib

Smtplib é uma biblioteca Python que pode ser usada como um cliente SMTP, como o seu Gmail, Yahoo, Thunderbird ou qualquer outro cliente de email e pode ser usado para enviar e -mails. Podemos executar todas as tarefas usando o cliente smtplib que podemos fazer com aqueles que têm interface gráfica do usuário.

Ele vem por padrão em python, caso você não o possua, então você pode instalar usando o seguinte comando.

ubuntu@ubuntu: ~ $ pip install smtplib

Ou em python3

ubuntu@ubuntu: ~ $ pip install smtplib

Escrevendo seu primeiro e -mail com Python

Neste tutorial, usarei uma conta do Gmail como remetente, também usarei o console python, para que eu seja mais fácil para mim explicar cada linha de código passo a passo. Para começar, precisamos permitir que nosso acesso ao Gmail a aplicativos menos seguros.

Portanto, faça o login na sua conta do Gmail e depois vá para as configurações da conta.

Agora verifique se o acesso para aplicativos menos seguros está ligado.

Agora abra seu console python e comece a escrever seu primeiro e -mail usando Python

ubuntu@ubuntu: ~ $ python
Python 2.7.16 (padrão, 7 de outubro de 2019, 17:36:04)
[GCC 8.3.0] no Linux2

Digite “ajuda”, “direitos autorais”, “créditos” ou “licença” para obter mais informações.

// importe a biblioteca SMTP
>>> importar smtplib
// conecta -se ao servidor Gmail com o nome do domínio e o número da porta (essa configuração difere para
Cada provedor de email, dê uma olhada na mesa abaixo)
>>> MailObj = smtplib.Smtp ('smtp.Gmail.com ', 587)
// Diga olá ao servidor
>>> Mailobj.ehlo ()
(250, 'SMTP.Gmail.com seu serviço, [103.255.4.246] \ NSize35882577 \ n8bitmime \ nstarttls \
NenhancedStatuscodes \ npipelining \ nchunking \ nsmtputf8 ')
// Porta 587 significa que estamos usando a conexão TLS criptografada, então comece a criptografar TLS
Comunicação usando startTls (), para que nossas credenciais e mensagens não fiquem cheiradas
>>> Mailobj.startTls ()
(220, '2.0.0 pronto para começar tls ')
// Faça login na sua conta do Gmail usando email e senha
>>> Mailobj.login ('[email protected] ',' s3cr3t_p4ssw0rd ')
(235, '2.7.0 aceito ')
// Especifique o endereço de e -mail do remetente e do destinatário e conteúdo de e -mail
>>> Mailobj.sendmail ('[email protected] ',' [email protected] ',' Assunto:
Olá Mundo! \ n Olá mundo! este é o meu primeiro e -mail de hello world em python ')

// Fechar a conexão com o servidor Gmail
>>> Mailobj.desistir()
(221, '2.0.0 conexão de fechamento B6SM4519863LFI.72 - GSMTP ')

No programa de amostra acima, substitua o conteúdo fornecido por seu próprio. Se você não é um usuário do Gmail, pode usar o servidor de email do seu provedor. Aqui está a lista de nomes de domínio e portos de alguns provedores de correio comum.

Nome Nome do domínio do servidor Porta
Gmail smtp.Gmail.com 587
Outlook / Hotmail SMTP-MAIL.panorama.com 587
E-mail do Yahoo smtp.correspondência.Yahoo.com 587
Verizon smtp.Verizon.líquido 465
Comcast smtp.Comcast.líquido 587

Algumas palavras sobre IMAP

Então, acabamos de estudar que o SMTP é usado para enviar e -mails, mas o que é IMAP (Internet Access Messaging Protocol) para? O SMTP não pode ser usado para pesquisar e obter e -mails do servidor, o protocolo IMAP ou POP3 é usado para esse fim.

IMAPCLIENT, IMAPLIB e PYZMAIL

Existem duas principais bibliotecas no Python que podem ser usadas como um cliente IMAP para encontrar, recuperar e excluir e -mails do servidor de email. Python tem padrão IMAPLIB biblioteca, mas outra biblioteca externa IMAPCLIENT é mais eficaz e fácil de usar. Neste tutorial, usaremos IMAPCLIENT Para recuperar e -mails do servidor de email.

O problema com IMAPCLIENT é que ele recupera e -mails do servidor de email em formato bruto. Então, vamos precisar Pyzmail Biblioteca como um analisador para saída amigável de usuário. Para instalar as duas bibliotecas, digite

ubuntu@ubuntu: ~ $ sudo pip install iMapclient
ubuntu@ubuntu: ~ $ sudo pip install pyzmail

Obtendo seus e -mails do servidor de correio

Agora, aprenderemos como pesquisar e baixar e -mail do servidor de email usando o IMAPCLIENT. Usaremos o IMAPCLIENT para pesquisar e baixar e -mails do servidor, depois usaremos o Pyzmail para analisar esse conteúdo bruto. Vamos

// Importar biblioteca imapclient
>>> Importar imapclient
// Conecte -se ao servidor IMAP do Gmail
>>> obj = imapclient.IMAPCLIENT ('IMAP.Gmail.com ', ssl = true)
// Faça login na sua conta de e -mail usando suas credenciais
>>> obj.login ('[email protected] ',' s3cr4tp4ss ')
'[email protected] autenticado (sucesso) '
// Selecione a pasta de mensagens para ler i.e caixa de entrada, rascunhos, e -mails enviados
>>> obj.select_folder ('Caixa de entrada', readonly = true)
'Existe': 830, 'Permanentflags': (), 'HighestModseq': 112999, 'uidNext': 931,
'Flags': ('\\ respondeu', '\\ sinalizou', '\\ draft', '\\ deletado', '\\ viu',
'$ Notphishing', '$ phishing'), 'uidvalididade': 1, 'somente leitura': ["], 'recente': 0
// Pesquise suas mensagens em sua caixa de entrada ou aplique um filtro, abaixo do filtro será exibido
Vocês os e-mails recebidos após 25 de outubro-2019
>>> Mail_ids = OBJ.pesquisa (['desde', '25 -Oct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// A lista “Mail_Ids” contém uma lista de IDs de e-mail recebidos desde 25 de outubro-2019,
Você pode baixar um e -mail usando a função de busca imapclient.
>>> raw_mail = obj.Fetch ([919], ['Body []', 'Flags']))
// agora, o conteúdo na variável raw_mail está em formato bruto, não pode ser exibido no
tela diretamente, então precisamos de um analisador para analisar esse conteúdo para uma saída amigável de usuário
>>> Importar Pyzmail
>>> mensagem = pyzmail.PyzMessage.fábrica (raw_mail [919] ['corpo []'])
// Agora o email está analisado e armazenado na variável de mensagem, para obter o assunto de
o email, use função get_subject
>>> mensagem.get_subject ()
U'Rida suas habilidades neste Halloween com 25% de desconto '
// Da mesma forma, você pode ver os detalhes do remetente
>>> mensagem.get_addresses ('de')
[(u'usama azad ',' [email protected] ')]
>>> mensagem.get_addresses ('to')
[(U'[email protected] ',' [email protected] ')]
// Para obter o corpo do email, digite
>>> mensagem.text_part.get_payload ().decodificar (mensagem.text_part.charset)
você ”oi! Desfrute de 25% em nossos cursos premium ”

Se você tiver uma conta em outro provedor de serviços de e -mail que não seja o Gmail, poderá fazer login no servidor IMAP deles. Aqui está a lista de nomes de domínio IMAP de alguns provedores de correio famosos.

Fornecedor Nome de domínio para servidor IMAP
Yahoo IMAP.correspondência.Yahoo.com
Hotmail/Outlook IMAP-MAIL.panorama.com
Verizon entrada.Verizon.líquido
Comcast IMAP.Comcast.líquido
AT&T IMAP.correspondência.att.líquido

Excluindo seu e -mail do servidor IMAP

Semelhante à pesquisa e recuperação de e -mails do servidor, você também pode excluir e -mails do seu servidor de e -mail usando o UID deles. Basta seguir as etapas dadas

// Para excluir um email, você deve virar apenas para 'falso' para obter acesso ao seu
e -mails
>>> obj.select_folder ('Caixa de entrada', readonly = false)
>>> Mail_ids = OBJ.pesquisa (['desde', '25 -Oct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// fornece um email UID ou uma lista de UIDs de email, depois de executar o comando abaixo,
Seu e -mail vai desaparecer da caixa de entrada.
>>> obj.Delete_Messages (919)
919: ('\\ visto', '\\ deleted')
// Este comando excluirá permanentemente seus e -mails do servidor de correio
>>> obj.expurgar()
('Sucesso', [])

https: // techtopz.com/Build-a-Birthday-Reminder-Aplicação-in-Python-on-Mac/

Fazendo o seu próprio lembrete de aniversário

Você tem aniversários de seus amigos nos próximos meses e deseja desejá -los em seus aniversários. Mas você tem muito trabalho em seu escritório e existe a possibilidade de você esquecer de desejar a eles. Portanto, esta tarefa pode ser executada automaticamente usando Python. A seguir, o código para executar esta tarefa.

// Módulos de importação
importar re
// O Módulo OS é usado para executar tarefas do sistema operacional I.e acessar diretórios de direcóticos
OS de importação
importar datetime
importar smtplib
// Definindo uma função que enviará e -mails
def send_mail (reciever_mail_address, nome):
sender_mail_address = "[email protected] "
passwd = "Senderpasswd"
// conectando -se ao servidor Gmail com o nome do domínio e o número da porta
obj = smtplib.Smtp ('smtp.Gmail.com ', 587)
obj.ehlo ()
obj.startTls ()
// Faça login na sua conta do Gmail
obj.Login (sender_mail_address, passwd)
// enviando e -mail para 'Reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Assunto: Aniversário desejando Mail \ n \ n happybirthday"+nome)
// Conexão final
obj.desistir()
// Corpo Principal
// Indo para o diretório no qual o arquivo contendo dados está presente
OS.chdir ("path_to_birthday_data_file")
enquanto 1:
// Obtendo data e hora do momento
Hoje = DateTime.data hora.hoje()
hoje = str (hoje)
// recebendo ano atual, mês, dia, hora, minuto e segundo
current_year = hoje [0: 4]
current_month = hoje [5: 7]
current_day = hoje [8:10]
current_hour = hoje [11:13]
current_minute = hoje [14:16]
current_sec = hoje [17:19]
// Abrindo o arquivo de aniversário no objeto 'aniversário_file' no modo de leitura
aniversário_file = aberto ('aniversário_file', 'r')
// Salvando todas as linhas de 'Birthday_File' na lista de linhas
linhas = aniversário_file.ReadLines ()
// Fechando o objeto 'Birthday_file'
aniversário_file.fechar()
// lendo cada linha usando o loop
Para linha nas linhas:
// Fazendo uma expressão regular para encontrar uma data em 'Birthday_file'
dateEx = re.compilar (r "\ d 4-\ d 2-\ d 2")
findDate = dateEx.Pesquisar (linha)
DATA = FindDate.grupo()
// Geting Birthday_month e Birthday_day do arquivo
Birthday_month = Data [5: 7]
aniversário_day = data [8:10]
// Fazendo uma expressão regular para encontrar o endereço de correio do aniversário_file
MailEx = re.compilar (r "\ w*@\ w*.com ")
FindMail = MailEx.Pesquisar (linha)
Reciever_mail = findmail.grupo()
// Fazendo uma expressão regular para encontrar o nome da pessoa
nameEx = re.compilar (r "\ w*")
FINDNAME = NameEx.Pesquisar (linha)
nome = findName.grupo()
// Verificando se o aniversário de alguém está chegando ou não
se current_month == aniversário_month e = current_day == aniversário_day:
// enviando e -mail às 08:00 exato 08:00
se current_hour == '08' e current_minute == '00' e current_sec == '00':
// Função chamando 'send_mail'
send_mail (reciever_mail, nome)

Agora fazemos um 'aniversário_file', no qual salvamos nomes, endereços de e -mail e sua data de nascimento. Este é um arquivo de texto simples e se parece com isso.

Explicação

Vamos ler este arquivo usando o script python e verificar de quem está chegando e desejamos a eles. Primeiro de tudo, vamos importar alguns módulos. O módulo DateTime tem funções que nos dão data e hora atuais e muito mais. Mas vamos usar isso apenas para encontrar a data e hora atuais. O módulo smtplib é usado para enviar e -mail e foi explicado acima. O módulo RE tem funções que são usadas para encontrar expressão regular de uma string.

Neste script, definimos a função 'Send_mail', que envia e -mails para o 'Reciever_mail_address', cujo nome é 'nome'. Ambos os argumentos são passados ​​para a função do corpo principal do MSG. No corpo principal do script, veremos como encontramos 'Reciever_mail_address' e 'nome'.

Enviar e -mail usando o smtplib foi explicado acima, para que você possa lê -lo e não será discutido aqui.

No corpo principal, vamos ao diretório onde salvamos 'aniversário_file' usando 'os' os.chdir () '. Então temos um 'while loop' que é sempre verdadeiro, então ele verificará o aniversário continuamente. Agora temos data e hora atuais e salvamos na variável 'hoje'. Se parece com isso.

2019-11-01 16:19:07.144925

Extrairemos ano, mês, dia, hora, minutos e segundos usando índices dessas quantidades. Depois disso, abriremos aniversário_file em um objeto 'aniversário_file' no modo de leitura, para que possamos lê -lo apenas. Agora salvaremos todas as linhas deste arquivo na lista de linhas. 'Aniversário_file.ReadLines () 'salvará cada linha na lista de' linhas '. Depois disso, fecharemos o aniversário_file usando 'aniversário_file.Close () 'Função.

Agora vamos ler cada linha um por um usando o loop. Em cada linha, apenas os dados de uma pessoa estão disponíveis em 'Birthday_file', por isso estamos lendo apenas os dados de uma pessoa ao mesmo tempo neste loop.

Depois disso, extrairemos a data de nascimento, endereço de e -mail e nome da pessoa usando o módulo RE. Como escrevemos a data no seguinte formato

AAAA-MM-DD

Então, faremos uma expressão regular 'DateEx', que encontra esse formato na linha.

ré.compilar (r ”\ d 4-\ d 2-\ d 2”)

Comando acima, encontre uma string que tenha '4 dígitos' seguidos por '-' então '2 dígitos' seguidos por '-' e '2 dígitos'. Isso nos dará a data de nascimento da pessoa, para que extraímos Birth_day e Birth_month desta expressão.

Da mesma forma, encontraremos endereço de e -mail usando expressões regulares. Depois disso, compararemos o aniversário_month e o current_month e o aniversário_day e o current_day. Se essas condições estiverem satisfeitas, enviaremos o e -mail de aniversário usando a função 'Send_mail' em exato '08: 00 '.

Executando o script automaticamente via Cronjob

Agora vamos garantir que este script python seja executado todas as vezes. Para fazer isso, adicionaremos esta tarefa a Crontab. Crontab, no Linux, é usado para executar tarefas automaticamente. O que temos que fazer é apenas adicionar a tarefa a Crontab. Para fazer isso, siga as etapas fornecidas.

  1. Abra Crontab para adicionar tarefa no seu terminal usando o seguinte comando
ubuntu@ubuntu: ~ $ crontab -e
  1. No final deste arquivo, insira o seguinte comando sem #
@reboot python path_to_the_the_script

Os comandos acima permitirão que seu sistema execute o script python toda vez que você reiniciar seu sistema. Dessa forma, seu sistema executará o script python toda vez que seu sistema estiver ligado.