- Ücretsiz bir api'ye bağlı ve proxy kullanmıyor entegre etmedim. Tek seferde 1000 adete kadar tarama sağlayabilir fakat proxysiz olduğundan dolayı engel yememesi için thread sayısı 2 olarak sınırlandırıldı.
- Yüklenen mailleri otomatik düzenleyebilir (örn: qwe@gmailcom12323 >> qwe@gmail.com)
- Sıkıntısız mailleri canli.txt , telefon onayına düşen ve devredışı olan mailleri kapalı.txt dosyasına kaydeder
- Çalıştırabilmeniz için programla aynı konumda emails.txt dosyası olması gerekir.

Geliştirmek isteyenler olursa açık kaynak kodlarıyla beraber linkini bırakıyorum üzerinde çalışabilirsiniz

KAYNAK KOD ;
import requests
import os
import sys
import ctypes
import time
import random
import re
import time
from colorama import init, Fore
from concurrent.futures import ThreadPoolExecutor, as_completed
from threading import Lock

init(autoreset=True)

if os.name == 'nt':
    import msvcrt

lock = Lock()
live_count = 0
error_count = 0
remaining = 0

key_list = [
    "282288a503b1e4664a0fdd0ce4d8ea59\n\n\n\n",
    "45128e4a6a1ac07f4e0718ce9c06504a\n\n\n\n",
    "7bbbd5e49444d9a730d22da47154d804\n\n\n\n",
    "5cc352f7c1ac115948fe81bb8541926c\n\n\n\n",
    "6a028ab5f59cfeb17b780900df81f17d\n\n\n\n",
    "f6623b8a2490dce03f1750f2d31f3e87\n\n\n\n",
    "f74cb4f76a11a204b51865b6149a8eec\n\n\n\n",
    "b7feba9db01a48ca8bc72b98628ae2b8\n\n\n\n",
    "00695fd0e7f318ecd2ebe518f795067a\n\n\n\n",
    "9c45fe11f1b80bbe140468003e0f9b21\n\n\n\n",
    "bb2a037f216f582bf792706d77abba7e\n\n\n\n",
    "f855cd26998981ccfaaf496527f30f09\n\n\n\n"
]

def set_console_title(title: str):
    if os.name == 'nt':
        ctypes.windll.kernel32.SetConsoleTitleW(title)
    else:
        sys.stdout.write(f"\33]0;{title}\a")
        sys.stdout.flush()

def wait_for_1_key():
    if os.name == 'nt':
        print("> Başlamak için [1] tuşuna basınız...")
        while True:
            if msvcrt.kbhit():
                key = msvcrt.getch()
                if key == b'1':
                    break
    else:
        while True:
            key = input("> Başlamak için [1] yazıp Enter'a basınız: ").strip()
            if key == '1':
                break

def normalize_email(email):
    match = re.match(r'^(.+@gmail\.com)', email)
    return match.group(1) if match else email.strip()

def check_email(email, url, headers, total):
    global live_count, error_count, remaining

    email = normalize_email(email)
    key_value = random.choice(key_list)

    data = {
        "fastCheck": True,
        "key": key_value,
        "mail": [email]
    }

    try:
        response = requests.post(url, json=data, headers=headers, timeout=10)
    except Exception:
        with lock:
            error_count += 1
            remaining -= 1
            print(Fore.RED + f"{email} | KAPALI (İstek Hatası)")
            set_console_title(f"Kalan Mail : {remaining}")
        return

    if response.status_code in [401, 403, 400]:
        print(Fore.RED + "Api Key Error! HTTP Status: " + str(response.status_code))
        sys.exit(1)

    try:
        result = response.json()
    except Exception:
        with lock:
            error_count += 1
            remaining -= 1
            print(Fore.RED + f"{email} | KAPALI (Geçersiz JSON)")
            set_console_title(f"Kalan Mail : {remaining}")
        return

    if result.get("status") is False:
        message = result.get("message", "").lower()
        if "key" in message or "api key" in message or "invalid" in message or "unauthorized" in message:
            print(Fore.RED + "Api Key Error! Mesaj: " + result.get("message", ""))
            sys.exit(1)

    status = "error"
    try:
        status_value = result["data"][0]["status"].lower()
        if status_value == "live":
            status = "live"
    except (KeyError, IndexError, TypeError):
        status = "error"

    with lock:
        if status == "live":
            live_count += 1
            print(Fore.GREEN + f"{email} | CANLI")
            with open("canli.txt", "a", encoding="utf-8") as f:
                f.write(email + "\n")
        else:
            error_count += 1
            print(Fore.RED + f"{email} | KAPALI")
            with open("kapali.txt", "a", encoding="utf-8") as f:
                f.write(email + "\n")
        remaining -= 1
        set_console_title(f"Kalan Mail : {remaining}")

def main():
    global remaining

    set_console_title("Gmail Checker [v0.1]")

    try:
        with open("emails.txt", "r", encoding="utf-8") as f:
            emails = [normalize_email(line.strip()) for line in f if line.strip()]
    except FileNotFoundError:
        print("emails.txt dosyası bulunamadı! Program sonlandırılıyor.")
        return

    total = len(emails)
    remaining = total
    print(f"> R10.Net | Fivefingerx ")
    print(f"> Toplam yüklenen mail sayısı : {total}")
    wait_for_1_key()

    url = "https://gmailver.com/php/check1.php"
    headers = {
        "Content-Type": "application/json"
    }

    start_time = time.time()

    with ThreadPoolExecutor(max_workers=2) as executor:
        futures = [executor.submit(check_email, email, url, headers, total) for email in emails]
        for _ in as_completed(futures):
            pass

    end_time = time.time()
    elapsed = end_time - start_time
    minutes = int(elapsed // 60)
    seconds = int(elapsed % 60)

    print()
    print(f"Toplam geçen süre : {minutes} dakika {seconds} saniye   |   Toplam Live : {live_count}   |   Toplam Error : {error_count}")

    if os.name == 'nt':
        print("\nÇıkmak için bir tuşa basın...")
        os.system("pause >nul")
    else:
        input("\nÇıkmak için Enter'a basın...")

if __name__ == "__main__":
    main()