actorcat

email lookup

Sep 25th, 2025 (edited)
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.61 KB | None | 0 0
  1. import os
  2. from bs4 import BeautifulSoup
  3. import re
  4. import urllib.parse
  5. import tkinter as tk
  6. from tkinter import filedialog, messagebox
  7. from pathlib import Path
  8.  
  9.  
  10. def get_desktop_path():
  11.     """Return user's Desktop path, including OneDrive versions."""
  12.     possible_paths = [
  13.         Path.home() / "Desktop",
  14.         Path.home() / "OneDrive" / "Desktop",
  15.         Path.home() / "OneDrive - Microsoft" / "Desktop",
  16.     ]
  17.     for p in possible_paths:
  18.         if p.exists():
  19.             return p
  20.     return Path.home()  # fallback if none exist
  21.  
  22.  
  23. def run_search():
  24.     base_path = base_path_entry.get().strip()
  25.     keyword = keyword_entry.get().strip()
  26.     folder_filter = folder_filter_entry.get().strip().lower()
  27.  
  28.     if not base_path or not keyword or not folder_filter:
  29.         messagebox.showwarning("Input Error", "Please fill in all fields.")
  30.         return
  31.  
  32.     # ✅ Get correct desktop path (OneDrive or local)
  33.     desktop_path = get_desktop_path()
  34.     output_file = desktop_path / f"{keyword}.html"
  35.  
  36.     print(f"🖥️ Output file will be saved to: {output_file}")
  37.  
  38.     found_any = False
  39.  
  40.     # ✅ Read toggle button states
  41.     whole_word = whole_word_var.get()
  42.     case_sensitive = case_sensitive_var.get()
  43.  
  44.     with open(output_file, "w", encoding="utf-8") as out:
  45.         for root, dirs, files in os.walk(base_path):
  46.             for dir_name in dirs:
  47.                 if folder_filter in dir_name.lower():  # user-specified folder (e.g., inbox/sent)
  48.                     folder_path = os.path.join(root, dir_name)
  49.                     print(f"📁 Searching in: {folder_path}")
  50.  
  51.                     for filename in os.listdir(folder_path):
  52.                         if filename.endswith((".html", ".htm", ".txt")):
  53.                             file_path = os.path.join(folder_path, filename)
  54.  
  55.                             try:
  56.                                 with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
  57.                                     if filename.lower().endswith((".html", ".htm")):
  58.                                         soup = BeautifulSoup(f, "html.parser")
  59.                                         text = soup.get_text(separator=" ")
  60.                                     else:
  61.                                         text = f.read()
  62.  
  63.                                     # ✅ Adjust regex pattern
  64.                                     if whole_word:
  65.                                         pattern = rf".{{0,40}}\b{re.escape(keyword)}\b.{{0,40}}"
  66.                                     else:
  67.                                         pattern = rf".{{0,40}}{re.escape(keyword)}.{{0,40}}"
  68.  
  69.                                     # ✅ Adjust case sensitivity
  70.                                     flags = 0 if case_sensitive else re.IGNORECASE
  71.  
  72.                                     matches = re.findall(pattern, text, flags=flags)
  73.  
  74.                                     if matches:
  75.                                         found_any = True
  76.                                         encoded_path = urllib.parse.quote(file_path.replace(os.sep, '/'))
  77.                                         file_link = f"file:///{encoded_path}"
  78.                                         out.write(f'<p>🔎 Found in: <a href="{file_link}">{filename}</a></p>\n')
  79.                                         for m in matches:
  80.                                             out.write("   ..." + m.strip() + "...\n")
  81.                             except Exception as e:
  82.                                 print(f"⚠️ Error reading {file_path}: {e}")
  83.  
  84.     if found_any:
  85.         messagebox.showinfo("✅ Done", f"Results saved to your Desktop:\n{output_file}")
  86.         print(f"✅ Results saved to {output_file}")
  87.     else:
  88.         os.remove(output_file)
  89.         messagebox.showinfo("🗑️ No Matches", "No matches found. Output file deleted.")
  90.         print(f"🗑️ No matches found — deleted {output_file}")
  91.  
  92.  
  93. def browse_folder():
  94.     folder_selected = filedialog.askdirectory()
  95.     if folder_selected:
  96.         base_path_entry.delete(0, tk.END)
  97.         base_path_entry.insert(0, folder_selected)
  98.  
  99.  
  100. # ---- Tkinter UI ----
  101. root = tk.Tk()
  102. root.title("Email Keyword Search")
  103.  
  104. # Base path
  105. tk.Label(root, text="Base Path:").grid(row=0, column=0, padx=5, pady=5, sticky="e")
  106. base_path_entry = tk.Entry(root, width=60)
  107. base_path_entry.grid(row=0, column=1, padx=5, pady=5)
  108. browse_button = tk.Button(root, text="Browse", command=browse_folder)
  109. browse_button.grid(row=0, column=2, padx=5, pady=5)
  110.  
  111. # Keyword
  112. tk.Label(root, text="Keyword:").grid(row=1, column=0, padx=5, pady=5, sticky="e")
  113. keyword_entry = tk.Entry(root, width=60)
  114. keyword_entry.grid(row=1, column=1, padx=5, pady=5)
  115.  
  116. # Folder filter (e.g. inbox / sent)
  117. tk.Label(root, text="Folder Filter (e.g. inbox/sent):").grid(row=2, column=0, padx=5, pady=5, sticky="e")
  118. folder_filter_entry = tk.Entry(root, width=60)
  119. folder_filter_entry.insert(0, "inbox")
  120. folder_filter_entry.grid(row=2, column=1, padx=5, pady=5)
  121.  
  122. # ✅ Options: Whole word & Case-sensitive
  123. whole_word_var = tk.BooleanVar(value=True)
  124. case_sensitive_var = tk.BooleanVar(value=False)
  125.  
  126. whole_word_check = tk.Checkbutton(root, text="Whole Word Only", variable=whole_word_var)
  127. whole_word_check.grid(row=3, column=1, sticky="w", padx=5)
  128.  
  129. case_sensitive_check = tk.Checkbutton(root, text="Case Sensitive", variable=case_sensitive_var)
  130. case_sensitive_check.grid(row=4, column=1, sticky="w", padx=5)
  131.  
  132. # Run button
  133. run_button = tk.Button(root, text="Run Search", command=run_search, bg="lightblue")
  134. run_button.grid(row=5, column=1, pady=10)
  135.  
  136. root.mainloop()
  137.  
  138.  
  139. ###  https://ddosecrets.com/article/ehud-barak-emails
  140.  
  141.  
  142.  
Advertisement
Add Comment
Please, Sign In to add comment