Pitão

Envio de e-mails com Python

Envio de 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 do destinatário, endereço, idade e outras pequenas coisas. Seria uma tarefa muito difícil para você escrever um programa que pudesse lidar com todos os tipos de seus e-mails pessoais / comerciais, mas ainda assim você pode automatizar muitas coisas a esse respeito, o que acabará por lhe poupar muito tempo.

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

Uma palavra sobre SMTP

Simple Mail Transfer Protocol (SMTP) é o equivalente computadorizado do seu serviço postal. É um protocolo que funciona na camada de aplicação de uma rede TCP / IP. É um protocolo padrão para envio e recebimento de e-mails pela internet. O processo de transferência de e-mail consiste em servidores de e-mail e clientes enviando e recebendo e-mails entre si.

Por exemplo, você tem uma conta GMAIL e deseja enviar um e-mail para seu amigo em sua conta YAHOO. Você escreve um e-mail e clica em enviar, mas o processo de back-end é um pouco complicado e, para entender esse processo, você precisa primeiro entender o SMTP. Seu cliente de e-mail SMTP primeiro envia OLÁ (ou EHLO) para o servidor GMAIL, você pode dizer que este comando ou cabeçalho é equivalente a Hospedeiro cabeçalho no protocolo HTTP e é usado para identificar o servidor usando o nome de domínio. Depois de HELO ou EHLO, o cliente se autentica no servidor com o nome de usuário e senha fornecidos usando AUTH comando. Em seguida, especifica o endereço de e-mail do remetente e do destinatário e, em seguida, o corpo da mensagem e envia o e-mail para o servidor GMAIL. O servidor GMAIL primeiro confirmará se o endereço de e-mail do destinatário no YAHOO existe ou não, então enviará o e-mail para o servidor YAHOO, de onde o destinatário pode recuperar seus e-mails.

SMTPLIB

SMTPLIB é uma biblioteca python que pode ser usada como um cliente SMTP, assim como seu GMAIL, YAHOO, Thunderbird ou qualquer outro cliente de e-mail e pode ser usada para enviar e-mails. Podemos realizar todas as tarefas usando o cliente SMTPLIB que podemos fazer com aqueles que têm interface gráfica de usuário.

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

[email protegido]: ~ $ pip install smtplib

OR em Python3

[email protegido]: ~ $ pip install smtplib

Escrevendo seu primeiro e-mail com Python

Neste tutorial, usarei uma conta GMAIL como remetente, também usarei o console Python, então será mais fácil para mim explicar cada linha de código passo a passo. Para começar, precisamos permitir que nosso GMAIL acesse aplicativos menos seguros.

Então acesse sua conta GMAIL e vá para as configurações da conta.

Agora certifique-se de que o acesso a aplicativos menos seguros esteja ativado.

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

[email protegido]: ~ $ 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.

// importar a biblioteca SMTP
>>> import smtplib
// conecte-se ao servidor GMAIL com nome de domínio e número de porta (esta configuração difere para
cada provedor de e-mail, por favor, dê uma olhada na tabela abaixo)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// diga olá para o servidor
>>> mailobj.Ehlo ()
(250, 'smtp.gmail.com ao seu serviço, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// A porta 587 significa que estamos usando uma conexão TLS criptografada, então inicie o TLS criptografado
comunicação usando starttls (), para que nossas credenciais e mensagens não sejam detectadas
>>> mailobj.starttls ()
(220, '2.0.0 Pronto para iniciar TLS ')
// faça login em sua conta GMAIL usando e-mail e senha
>>> mailobj.login ('[email protegido]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 aceito ')
// especifica o remetente e o endereço de e-mail do destinatário e o conteúdo do e-mail
>>> mailobj.sendmail ('[email protegido]', '[email protegido]', 'Assunto:
Olá Mundo! \ n Olá, mundo! este é meu primeiro e-mail hello world em Python ')

// fecha a conexão com o servidor GMAIL
>>> mailobj.Sair()
(221, '2.0.0 fechando conexão b6sm4519863lfi.72 - gsmtp ')

No programa de exemplo acima, substitua o conteúdo fornecido pelo seu próprio. Se você não é um usuário GMAIL, pode usar o servidor de e-mail do seu provedor. Aqui está a lista de nomes de domínio e portas de alguns provedores de e-mail comuns.

Nome Nome de 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.internet 465
Comcast smtp.comcast.internet 587

Algumas palavras sobre IMAP

Acabamos de estudar que o SMTP é usado para enviar e-mails, mas para que serve o IMAP (Internet Access Messaging Protocol)? 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 bibliotecas principais em Python que podem ser usadas como um cliente IMAP para localizar, recuperar e excluir e-mails do servidor de e-mail. 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 e-mail.

O problema com imapclient é que ele recupera e-mails do servidor de e-mail em formato bruto. Então, vamos precisar pyzmail biblioteca como um analisador para saída amigável. Para instalar as duas bibliotecas, digite

[email protegido]: ~ $ sudo pip install imapclient
[email protegido]: ~ $ sudo pip install pyzmail

Obtendo seus e-mails do servidor de correio

Agora, aprenderemos como pesquisar e baixar e-mail do servidor de e-mail usando imapclient. Usaremos imapclient para pesquisar e baixar e-mails do servidor, então usaremos pyzmail para analisar este 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 em sua conta de e-mail usando suas credenciais
>>> obj.login ('[email protegido]', 's3cr4tp4ss')
'[email protegido] autenticado (sucesso)'
// Selecione a pasta de mensagens para ler i.e INBOX, DRAFTS, SENT mails
>>> obj.select_folder ('INBOX', somente leitura = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'SINALIZADORES': ('\\ Respondido', '\\ Sinalizado', '\\ Rascunho', '\\ Excluído', '\\ Visto',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'SOMENTE LEITURA': ["], 'RECENTE': 0
// Pesquise suas mensagens em sua CAIXA DE ENTRADA, ou aplique um filtro, o filtro abaixo mostrará
os e-mails recebidos após 25 de outubro de 2019
>>> mail_ids = obj.pesquisa (['DESDE', '25 -Out-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 de 2019,
você pode baixar um e-mail usando a função imapclient fetch.
>>> raw_mail = obj.buscar ([919], ['BODY []', 'FLAGS'])
// Agora, o conteúdo da variável raw_mail está em formato bruto, não pode ser exibido no
tela diretamente, então precisaríamos de um analisador para analisar este conteúdo para uma saída amigável
>>> importar pyzmail
>>> mensagem = pyzmail.PyzMessage.fábrica (raw_mail [919] ['BODY []'])
// Agora o e-mail é analisado e armazenado na variável de mensagem, para obter o assunto de
o e-mail, use a função get_subject
>>> mensagem.get_subject ()
u'Dressione 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 protegido] ')]
>>> mensagem.get_addresses ('para')
[(u '[email protegido]', '[email protegido]')]
// Para obter o corpo do e-mail, digite
>>> mensagem.text_part.get_payload ().decodificar (mensagem.text_part.charset)
u ”oi! Desfrute de 25% em nossos cursos premium ”

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

Fornecedor Nome de domínio para servidor IMAP
YAHOO imap.correspondência.yahoo.com
Hotmail / Outlook imap-mail.panorama.com
Verizon entrada.Verizon.internet
Comcast imap.comcast.internet
AT&T imap.correspondência.att.internet

Excluindo seu e-mail do servidor IMAP

Semelhante a pesquisar e recuperar e-mails do servidor, você também pode excluir e-mails de seu servidor de e-mail usando seu uid. Basta seguir os passos indicados

// Para excluir um e-mail, você deve transformar somente leitura em 'False' para obter acesso de gravação ao seu
emails
>>> obj.select_folder ('INBOX', somente leitura = False)
>>> mail_ids = obj.pesquisa (['DESDE', '25 -Out-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Fornece um uid de e-mail ou uma lista de uids de e-mail, após executar o comando abaixo,
seu e-mail desaparecerá da caixa de entrada.
>>> obj.delete_messages (919)
919: ('\\ Visto', '\\ Excluído')
 
// Este comando excluirá permanentemente seus e-mails do servidor de e-mail
>>> obj.expurgar()
('Sucesso', [])

https: // techtopz.com / build-a-birthday-reminder-application-in-python-on-mac /

Fazendo seu próprio lembrete de aniversário

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

// importando módulos
importar re
// o módulo os é usado para realizar tarefas do sistema operacional i.e acessar diretórios
importar os
importar data e hora
importar smtplib
 
// definindo uma função que irá enviar e-mails
def send_mail (reciever_mail_address, nome):
sender_mail_address = "[email protegido]"
passwd = "senderPasswd"
// conectando-se ao servidor gmail com nome de domínio e número da porta
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.Ehlo ()
obj.starttls ()
// fazendo login em 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: BirthDay Desejando Mail \ n \ n HappyBirthday" + nome)
// encerrando a conexão
obj.Sair()
// 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 presente
hoje = data.data hora.hoje()
hoje = str (hoje)
// obtendo ano, mês, dia, hora, minuto e segundo atual
ano_atual = hoje [0: 4]
mês_atual = hoje [5: 7]
current_day = hoje [8:10]
hora_atual = hoje [11:13]
current_minute = hoje [14:16]
current_sec = hoje [17:19]
// abrindo arquivo de aniversário no objeto 'birthday_file' em modo de leitura
birthday_file = open ('birthday_file', 'r')
// salvando todas as linhas de 'birthday_file' na lista de linhas
lines = birthday_file.readlines ()
// fechando o objeto 'birthday_file'
birthday_file.perto()
// lendo cada linha usando o loop for
para linha em 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.pesquisa (linha)
data = findDate.grupo()
// obtendo birthday_month e birthday_day do arquivo
birthday_month = date [5: 7]
birthday_day = data [8:10]
// fazendo uma expressão regular para encontrar o endereço de e-mail de birthday_file
mailEx = re.compilar (r "\ w * @ \ w *.com ")
findMail = mailEx.pesquisa (linha)
reciever_mail = findMail.grupo()
// fazendo uma expressão regular para encontrar o nome da pessoa
nameEx = re.compilar (r "\ w *")
findName = nameEx.pesquisa (linha)
name = findName.grupo()
// verificar se o aniversário de alguém está chegando ou não
if current_month == birthday_month and = current_day == birthday_day:
// enviando e-mail exatamente às 08:00
if current_hour == '08' e current_minute == '00' e current_sec == '00':
// chamando a função 'send_mail'
send_mail (reciever_mail, nome)

Agora fazemos um 'arquivo_de_ aniversários', no qual salvamos nomes, endereços de e-mail e suas datas de nascimento. Este é um arquivo de texto simples e se parece com este.

Explicação

Vamos ler este arquivo usando o script python e verificar de quem é o aniversário e desejar-lhes. Primeiramente vamos importar alguns Módulos. O módulo DATETIME tem funções que nos fornecem data e hora atuais e muito mais. Mas só usaremos isso 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 a expressão regular de uma string.

Neste script, definimos a função 'send_mail', que envia e-mail para o 'reciever_mail_address', cujo nome é 'nome'. Ambos os argumentos são passados ​​para a função a partir do corpo principal da msg. No corpo principal do script, veremos como encontramos 'reciever_mail_address' e 'nome'.

O envio de e-mail usando smtplib foi explicado acima, então você pode lê-lo e não será discutido aqui.

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

01/11/2019 16:19:07.144925

Extrairemos ano, mês, dia, hora, minutos e segundos usando os índices dessas quantidades. Depois disso, vamos abrir birthday_file em um objeto 'birthday_file' em modo de leitura, então podemos apenas lê-lo. Agora vamos salvar todas as linhas deste arquivo na lista de linhas. 'birthday_file.readlines () 'irá salvar cada linha na lista de' linhas '. Depois disso, fecharemos birthday_file usando 'birthday_file.função close () '.

Agora vamos ler cada linha uma por uma usando o loop for. Em cada linha, apenas os dados de uma pessoa estão disponíveis em 'birthday_file', portanto, estamos lendo apenas os dados de uma pessoa de cada vez neste loop.

Depois disso, iremos extrair 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 vamos fazer uma expressão regular 'dateEx' que encontra este formato na linha.

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

O comando acima encontra uma string que tem '4 dígitos' seguidos por '-' e então '2 dígitos' seguidos por '-' e '2 dígitos'. Isso nos dará a data de nascimento da pessoa, então iremos extrair birth_day e birth_month desta expressão.

Da mesma forma, encontraremos o endereço de e-mail usando expressões regulares. Depois disso, compararemos o mês_de_aniversario e o mês_atual e o dia_de_ aniversario e o dia_atual. Se essas condições forem satisfeitas, enviaremos o e-mail de aniversário usando a função 'send_mail' exatamente às '08: 00 '.

Executando script automaticamente via Cronjob

Agora vamos ter certeza de que este script Python executa sempre. Para fazer isso, vamos adicionar esta tarefa ao crontab. O Crontab, no linux, é usado para realizar tarefas automaticamente. O que temos que fazer é apenas adicionar a tarefa ao crontab. Para fazer isso, siga as etapas fornecidas.

  1. Abra o crontab para adicionar tarefas em seu terminal usando o seguinte comando
[email protegido]: ~ $ crontab -e
  1. No final deste arquivo, digite o seguinte comando sem #
@reboot python path_to_the_script

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

Análise do mouse sem fio Microsoft Sculpt Touch
Recentemente li sobre o Microsoft Sculpt Touch mouse sem fio e decidi comprá-lo. Depois de usá-lo por um tempo, decidi compartilhar minha experiência ...
AppyMouse na tela Trackpad e ponteiro do mouse para tablets Windows
Os usuários de tablets costumam perder o ponteiro do mouse, especialmente quando costumam usar laptops. Os smartphones e tablets touchscreen vêm com m...
O botão do meio do mouse não funciona no Windows 10
O botão do meio do mouse ajuda você a percorrer longas páginas da web e telas com muitos dados. Se isso parar, você vai acabar usando o teclado para r...