Email List Txt File May 2026
Before you upload your .txt file to an email service provider (ESP) like Mailchimp, ConvertKit, or Amazon SES, you must sanitize it. Here is a checklist of operations you should perform on your raw text file.
Save the following script as email_report.py and run it from the same folder as your .txt file. email list txt file
import re
from collections import Counter
def generate_email_report(file_path):
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:
lines = [line.strip() for line in f] Before you upload your
total_lines = len(lines)
non_empty = [l for l in lines if l]
email_regex = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
valid = []
invalid = []
for email in non_empty:
if re.match(email_regex, email):
valid.append(email.lower())
else:
invalid.append(email)
unique_valid = list(dict.fromkeys(valid))
duplicates = len(valid) - len(unique_valid)
domains = [email.split('@')[1] for email in unique_valid if '@' in email]
domain_counts = Counter(domains).most_common(10)
print("\n📊 EMAIL LIST REPORT")
print(f"File: file_path")
print(f"Total lines: total_lines")
print(f"Non-empty lines: len(non_empty)")
print(f"Valid emails: len(valid)")
print(f"Unique emails: len(unique_valid)")
print(f"Duplicates removed: duplicates")
print(f"Invalid emails: len(invalid)")
print("\n🏆 Top 10 Domains:")
for domain, count in domain_counts:
print(f" domain: count")
if invalid:
print("\n⚠️ First 5 invalid entries:")
for inv in invalid[:5]:
print(f" - inv")
If your ESP has a per-import limit (say 5,000 emails), split your large TXT file: If your ESP has a per-import limit (say
split -l 5000 big_list.txt part_
This creates part_aa, part_ab, etc., each with 5,000 emails.