Added to Cart

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.