Aula 8 - Email, DBs e OO

smtplib

  • Liberar Acesso ao SMTP do Gmail:
  • https://myaccount.google.com/lesssecureapps
  • Tela de ativação:

    ![acesso_menos_seguro.png](../img/acesso_menos_seguro.png)
    
  • Protocolos SMTP:

  • Gmail: https://support.google.com/a/answer/176600?hl=pt#zippy=%2Cusar-o-servidor-smtp-do-gmail
  • Outlook: https://support.microsoft.com/pt-br/office/configurações-pop-imap-e-smtp-para-outlook-com-d088b986-291d-42b8-9564-9c414e2aa040

  • Importar as bibliotecas:

    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.application import MIMEApplication
    
  • Instanciar o email:

    mail = MIMEMultipart()
    
  • Criar o corpo do e-mail:

    payload = """Olá! Tudo bem?
    
    Este é um e-mail automático para testar o disparo de e-mail ensinado pelo curso de RPA Python!
    
    Atenciosamente,
    
    RPA Pythonico
    """
    
  • Configurar o e-mail que está enviando:

    mail['From'] = 'rpapythonico@gmail.com'
    
  • Configurar o(s) destinatário(s) do e-mail

    # UM destinatário
    mail['To'] = 'rpapythonico@gmail.com'
    
    # MAIS DE UM destinatário
    mail['To'] = 'rpapythonico@gmail.com,seu_email@provedor.com'
    
  • Configurar o assunto do e-mail:

    mail['Subject'] = 'Email Automático - SMTPLIB'
    
  • Formatar o corpo do e-mail em formato de texto:

    mail.attach(MIMEText(payload, 'plain'))
    
  • Criar conexão SMTP:

    server = smtplib.SMTP('smtp.gmail.com', '587')
    server.starttls()
    
  • Se autenticar no servidor SMTP:

    server.login(msg['From'], 'sua_senha')
    
  • Enviar e-mail:

    • SEM Anexo

      # UM destinatário
      server.sendmail(mail['From'], mail['To'], mail.as_string())
      
      # MAIS DE UM destinatário
      server.sendmail(mail['From'], mail['To'].split(","), mail.as_string())
      
    • COM Anexo

      file = open('seu_arquivo.py', 'rb')
      
      app = MIMEApplication(file.read(), 'py')
      app.add_header('Content-Disposition', 'attachment;filename=seu_arquivo.py')
      mail.attach(app)
      
      # UM destinatário
      server.sendmail(mail['From'], mail['To'], mail.as_string())
      
      # MAIS DE UM destinatário
      server.sendmail(mail['From'], mail['To'].split(","), mail.as_string())
      
  • Finalizar conexão SMTP:

    server.quit()
    

Ferramentas DB

sqlite3

  • Importar biblioteca:

    import sqlite3
    
  • Criar conexão:

    con = sqlite3.connect('example.db')
    
  • Criar cursor:

    cur = con.cursor()
    
  • Criar uma tabela:

    cur.execute('''CREATE TABLE "TB_Cliente"( "CPF" INTEGER NOT NULL UNIQUE, "Nome_Completo" TEXT NOT NULL, "Data_Nascimento" TEXT NOT NULL, "Telefone" TEXT, "Email" TEXT, "CEP" TEXT NOT NULL, PRIMARY KEY("CPF"));''')
    
  • Aprovar as interações com o banco de dados:

    con.commit()
    
  • Inserir algum dado:

    cur.execute('''INSERT INTO TB_Cliente VALUES (20955758572, 'Laura Luana Assis', '13/06/1948', '68991361938', 'lauraluanaassis-91@naressi.com.br', '69911355')''')
    con.commit()
    
  • Inserir vários registros no banco:

    lista_registros = [(88190475789, 'José Hugo Manuel Porto', '11/07/1997', '41989320821', 'jjosehugomanuelporto@patriciagrillo.adv.br', '83309270'), (39962955106, 'Marina Carolina dos Santos', '26/09/1995', '81984235792', 'marinacarolinadossantos_@lukin4.com.br', '53350130'), (20955758572, 'Laura Luana Assis', '13/06/1948', '68991361938', 'lauraluanaassis-91@naressi.com.br', '69911355'), (76938977550, 'Yasmin Evelyn Maria Costa', '20/04/1959', '91998657654', 'yasminevelynmariacosta-88@yahoo.com.ar', '66810020'), (25373027375, 'Fernando Giovanni Bernardes', '02/03/1964', '81989889726', 'fernandogiovannibernardes-92@soulcomunicacao.com.br', '51180440'), (85775491947, 'Clarice Vitória Teixeira', '24/02/1958', '82996438794', 'claricevitoriateixeira-97@india.com', '57052605'), (4847726278, 'Kamilly Clara Caldeira', '21/04/1982', '27998331799', 'kamillyclaracaldeira__kamillyclaracaldeira@caferibeiro.com.br', '29194248'), (90123303354, 'Carolina Cláudia Pietra da Rocha', '14/04/1952', '63992520221', 'carolinaclaudiapietradarocha__carolinaclaudiapietradarocha@riguetti.com.br', '77017297'), (96558670801, 'Levi Theo Matheus Ramos', '04/04/1961', '22988505045', 'levitheomatheusramos..levitheomatheusramos@cordeiromaquinas.com.br', '28024123'), (57218723306, 'Davi Márcio Rafael Nogueira', '25/07/1997', '69991521228', 'davimarciorafaelnogueira..davimarciorafaelnogueira@silnave.com.br', '76964042')]
    cur.executemany("INSERT INTO TB_Cliente VALUES (?, ?, ?, ?, ?, ?)", lista_registros)
    con.commit()
    
  • Apagar algum dado:

    cur.execute('''DELETE FROM TB_Cliente WHERE CPF = 88190475789''')
    con.commit()
    
  • Atualizar algum dado:

    cur.execute('''UPDATE TB_Cliente SET Telefone = NULL, Email = NULL WHERE CPF = 39962955106''')
    con.commit()
    
  • Ver um dado na tabela:

    cur.execute('''SELECT * FROM TB_Cliente''')
    cur.fetchone()
    # output: (116415509, 'Analu Julia da Paz', '05/04/1974', '79982386771', 'aanalujuliadapaz@alwan.com.br', '49026130')
    
  • Ver todos os dados da tabela:

    cur.execute('''SELECT * FROM TB_Cliente''')
    cur.fetchall()
    # Realizado slice ([:3) no output para apresentar pequenos exemplos
    # output: [(116415509, 'Analu Julia da Paz', '05/04/1974', '79982386771', 'aanalujuliadapaz@alwan.com.br', '49026130'), (4847726278, 'Kamilly Clara Caldeira', '21/04/1982', '27998331799', 'kamillyclaracaldeira__kamillyclaracaldeira@caferibeiro.com.br', '29194248'), (7287125803, 'Eduarda Emily Almada', '20/04/1941', '32985692709', 'eduardaemilyalmada_@peopleside.com.br', '36200142')]
    
  • Fechar conexão do banco de dados:

    con.close()
    

pyodbc

  • Instalar biblioteca:

    pip install pyodbc
    
  • Importar biblioteca:

    import pyodbc
    
  • Criar conexão com o banco de dados:

    # Com credenciais
    conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=TB_Cliente;UID=user;PWD=password')
    
    #Sem credenciais:
    conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=TB_Cliente')
    

Utilitários DB

Orientação à Objeto

  • Criar uma classe:

    class Cachorro:
    
  • Criar variáveis e ações da Classe ao chamá-la:

     def __init__(self, nome, idade, raca='Vira-Lata'):
       self._nome = nome.title()
        self._idade = int(idade)
        self._raca = raca.title()
    
  • Criar variáveis “privadas” da Classe:

    • Usar parênteses;

    python self._nome = nome.title()

  • Inserir método de atualização do nome:

     def atualiza_nome(self, novo_nome):
       self._nome = novo_nome
    
  • Inserir método de atualização da idade:

     def atualiza_idade(self, nova_idade):
       self._idade = nova_idade
    
  • Inserir método de atualização da raça:

     def atualiza_raca(self, nova_raca):
       self._raca = nova_raca
    
  • Inserir método que imprime as descrições do cachorro:

     def informacoes(self):
       print(f'O cachorro da raça {self._raca} se chama {self._nome} e possui {self._idade} anos.')
    
  • Inserir método que faz o cachorro sentar:

     def sentar(self):
       print(f'O cachorro {self._nome} está sentado agora!')
    
  • Inserir método que faz o cachorro rolar:

     def rolar(self):
       print(f'O cachorro {self._nome} está rolando agora!')
    
  • Inserir método que faz o cachorro deita:

     def deitar(self):
      print(f'O cachorro {self._nome} está deitado agora!')
    
  • Importar uma Classe (vale destacar que para isso, você precisa estar no diretório em que foi criado o arquivo da classe):

    from classe_cachorro import Cachorro
    
  • Criar um objeto na Classe:

    obj = Cachorro('Rex', 3, 'Shih Tzu')
    
  • Acessar funcionalidades da classe com o objeto criado:

    obj.informacoes()
    # output: O cachorro da raça Shih Tzu se chama Rex e possui 3 anos.
    
  • Atualizar raça do cachorro contido no objeto:

    obj.atualiza_raca('Terrier')