Executando verificação de segurança...
1

Como criar e salvar emails reais em uma base de dados com Python? 🚀

Fala, galera! 👋
Estou trabalhando em um projeto onde preciso criar emails reais e salvá-los em uma base de dados. Estava usando a biblioteca Selenium, mas nada deu certo até agora. 😢
Também tentei o PyAutoGUI, mas continuo recebendo o erro: "Error code 7". 🛑

Alguém aí já passou por isso e tem uma ideia de como resolver? 🔧
Se puderem sugerir outras bibliotecas ou maneiras mais eficazes de fazer isso, seria incrível! 🙌

Detalhes do que preciso:

  1. Criar emails reais automaticamente. 📧
  2. Salvar essas informações (email, senha, etc.) em um banco de dados. 💾
  3. Usar Python como linguagem principal. 🐍

Valeu demais pela ajuda! 💪🔥
PS: Se puderem, mandem exemplos ou links úteis pra me dar um norte. 🌟


Codigo Atual

from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, WebDriverException
import logging
import time
import random
from task import get_phone_number, get_verification_code, fetch_emails, connect_db, save_email
import pyautogui as pg

GOOGLE_SIGNUP_URL = "https://accounts.google.com/signup"
PROXY_SERVER = "ukGDVRlSLkZYfG4A:senha:rotating.proxyempire.io:9000"
DEFAULT_WAIT_TIME = 120

class EmailAutomation:
    def __init__(self, proxy):
        options = webdriver.FirefoxOptions()
        # options.add_argument("--headless")
        options.add_argument("--disable-automation")
        options.add_argument("--disable-blink-features=AutomationControlled")  # Remove a detecção de automação
        options.add_argument("--disable-infobars")  # Remove a mensagem "Controlado por automação"
        options.add_argument("--disable-extensions")
        options.add_argument("--disable-dev-shm-usage")
        options.add_argument("--no-sandbox")
        options.add_argument("-private")
        options.set_preference("general.useragent.override", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36")

        if proxy:
            proxy_config = proxy.split(":")
            if len(proxy_config) == 4:
                user, password, ip, port = proxy_config
                options.set_preference("network.proxy.type", 1)
                options.set_preference("network.proxy.http", ip)
                options.set_preference("network.proxy.http_port", int(port))
                options.set_preference("network.proxy.ssl", ip)
                options.set_preference("network.proxy.ssl_port", int(port))
                options.set_preference("network.proxy.socks_username", user)
                options.set_preference("network.proxy.socks_password", password)
            else:
                logging.error("Formato de proxy inválido. Por favor, revise a configuração.")
        try:
            service = Service(GeckoDriverManager().install())
            self.driver = webdriver.Firefox(service=service, options=options)
            logging.info("Navegador iniciado com sucesso")
        except WebDriverException as e:
            logging.error(f"Erro ao iniciar o navegador: {e}")
            raise

    def create_email_account(self, email):
        driver = self.driver
        driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
        try:
            # abrir página de signup do Google
            driver.get(GOOGLE_SIGNUP_URL)
            wait = WebDriverWait(driver, DEFAULT_WAIT_TIME)

            email_names = [
                "Ana", "Maria", "Beatriz", "Julia", "Gabriela", "Fernanda", "Carla", "Patricia", "Luana", "Rita",
                "Mariana", "Catarina", "Luciana", "Marta", "Juliana", "Vanessa", "Tania", "Simone", "Isabela", "Raquel",
                "Larissa", "Aline", "Tatiane", "Camila", "Monique", "Daniele", "Caroline", "Bianca", "Renata", "Elaine",
                "Lúcia", "Adriana", "Sandra", "Cristiane", "Sabrina", "Lilian", "Letícia", "Rosana", "Márcia", "Sílvia",
                "Natalia", "Priscila", "Cíntia", "Marina", "Verônica", "Michele", "Juliana", "Paula", "Kelly", "Cláudia",
                "Ester", "Joana", "Gláucia", "Rafaela", "Gabrielle", "Luciane", "Elaine", "Mariane", "Jéssica", "Kátia",
                "Thais", "Silvia", "Eliane", "Andreia", "Cleusa", "Vilma", "Lorena", "Roseli", "Sueli", "Neide", "Vera"
            ]
            email_surnames = [
                "Silva", "Santos", "Oliveira", "Pereira", "Costa", "Almeida", "Rodrigues", "Souza", "Lima", "Gomes",
                "Martins", "Fernandes", "Carvalho", "Melo", "Ribeiro", "Nascimento", "Araujo", "Dias", "Lopes", "Barbosa",
                "Ferreira", "Batista", "Castro", "Pinto", "Cavalcanti", "Vieira", "Freitas", "Moreira", "Teixeira", "Machado",
                "Queiroz", "Maciel", "Ramos", "Figueiredo", "Viana", "Moura", "Cunha", "Macedo", "Nunes", "Pereira", "Santos",
                "Tavares", "Marques", "Brito", "Gonçalves", "Zanetti", "Serrano", "Lima", "Rosa", "Brandão", "Azevedo", 
                "Pimentel", "Simões", "Cunha", "Barreto", "Pecanha", "Rochas", "Vasquez", "Farias", "Monteiro", "Martins",
                "Lopes", "Morais", "Correia", "Pinheiro", "Nascimento", "Dias", "Cunha", "Lima", "Barbosa", "Silveira",
                "Siqueira", "Salles", "Borges", "Assis", "Fonseca", "Valente", "Mota", "Fagundes", "Galvão", "Santiago", "Xavier",
                "Vilela", "Serrano", "Vieira", "Vargas", "Ribeiro", "Moreira", "Cavalcanti", "Tavares", "Pereira", "Pimentel"
            ]

            try:
                first_name_input = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@id='firstName']")))
                first_name_input.clear()
                first_name_input.send_keys(random.choice(email_names))
                last_name_input = wait.until(EC.presence_of_element_located((By.ID, "lastName")))
                last_name_input.clear()
                last_name_input.send_keys(random.choice(email_surnames))
                next_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Next']")))
                driver.execute_script("arguments[0].scrollIntoView();", next_button)
                next_button.click()
            except TimeoutException as e:
                logging.error(f"Timeout ao tentar encontrar o botão 'Next': {e}")
                driver.save_screenshot("timeout_next_button.png")
                return False
            except Exception as e:
                logging.error(f"Erro ao interagir com o botão 'Next': {e}")
                driver.save_screenshot("unexpected_error_next_button.png")
                return False
        except Exception as e:
            logging.error(f"Erro ao criar conta de email: {email}")
            return False

    def close(self):
        if self.driver:
            self.driver.quit()
            logging.info("Navegador fechado com sucesso")

def main():
    db = connect_db()
    if not db:
        logging.error("Tentativa falha ao conectar-se com o banco de dados")
        return
    
    emails = fetch_emails(db)

    if not emails:              
        logging.error("Nenhum email encontrado para o processamento")
        db.close()
        return

    automation = None
    try:
        automation = EmailAutomation(proxy=None)
        for entry in emails:
            email = entry['email']
            senha = entry['senha']
            gmail = entry['primeiro_nome']
            if not automation.create_email_account(email):
                logging.warning(f"Tentativa de criar email {email} falhou. Prosseguindo para o próximo.")
    finally:
        if automation:
            automation.close()
        db.close()

if __name__ == "__main__":
    main()
Carregando publicação patrocinada...
2

Olá Felipe. Ao invés de usar automação, crie emails reais conectando no servidor de e-mails e enviando ou recebendo. Depois que enviá-los, salve na base. Veja, por exemplo, essa biblioteca em python para gmail:
https://github.com/charlierguo/gmail/blob/master/LICENSE
E essa aqui mais abrangente, inclusive salvando em banco:
https://github.com/mailpile/Mailpile
Mais 3 das melhores bibliotecas Python para enviar e receber e-mails:

  1. yagmail https://github.com/kootenpv/yagmail
    Simplifica o envio de e-mails com o Gmail. Oferece uma API amigável e suporte integrado para anexos e envio de HTML.
    Configuração simples com menos código.
    Suporte a templates de e-mail.
    Gerenciamento automático de anexos.
    Indicado para envio rápido de e-mails usando Gmail.
  2. flask-mailman:
    https://github.com/pallets-eco/flask-mailman
    Fork do Flask-Mail, com suporte melhorado para envio de e-mails com Python.
    Compatível com servidores SMTP e backends como console e arquivos.
    Configuração flexível para projetos Flask/Django-like.
    Suporte a anexos e mensagens de múltiplas partes (HTML e texto).
    Indicado para: Aplicações web que precisam enviar notificações por e-mail.
  3. imbox
    https://github.com/martinrusev/imbox
    Biblioteca para manipular e-mails recebidos via IMAP.
    Suporte para busca e filtragem de e-mails.
    Fácil leitura de mensagens e download de anexos.
    Focada no recebimento de e-mails.
    Para projetos que requerem leitura e processamento de e-mails
1

Obrigado por compartilhar essas libs!

Pelo que entendi, o autor quis dizer que ele precisava criar contas de emails

Estou trabalhando em um projeto onde preciso criar emails reais e salvá-los em uma base de dados.

A parte do "reais" também é um equívoco na comunicação porque a solução que busca é basicamente um bot para criar emails.

Nunca fiz isso, mas apenas jogando no Google bot to create email accounts encontrei esse repositório que parece promissor
Gmail-Creation-Automation-Python: https://github.com/khaouitiabdelhakim/Gmail-Creation-Automation-Python

Bons estudos!

1
1

ah, acho que entendi, ele quer mesmo é gerar novos endereços de e-mail válidos, contas de e-mail mesmo, ainda que meio que temporárias. Se for isso, aí é outra história, mas é interessante. Valeu pelo esclarecimento e pela indicação do repositório github.

1