Whether you're building a SaaS app, a data pipeline, or an email marketing tool, adding email verification in Python is straightforward. Here's everything you need.
import re
def is_valid_format(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return bool(re.match(pattern, email))
print(is_valid_format('[email protected]')) # True
print(is_valid_format('notanemail')) # FalseFor real verification (checking if the mailbox exists), use the CheckMail1 API:
import requests
API_KEY = 'your_api_key_here'
def verify_email(email):
response = requests.get(
'https://checkmail1.com/api/verify',
params={'email': email},
headers={'X-API-Key': API_KEY}
)
return response.json()
result = verify_email('[email protected]')
print(result)
# {'valid': True, 'score': 95, 'provider': 'gmail'}from concurrent.futures import ThreadPoolExecutor
import csv
def verify_bulk(email_list, max_workers=10):
with ThreadPoolExecutor(max_workers=max_workers) as executor:
results = list(executor.map(verify_email, email_list))
return results
# Load from CSV
with open('emails.csv') as f:
reader = csv.reader(f)
emails = [row[0] for row in reader]
results = verify_bulk(emails)
valid = [e for e, r in zip(emails, results) if r.get('valid') and r.get('score', 0) > 70]
print(f'{len(valid)}/{len(emails)} valid emails')# Flask example
from flask import request, jsonify
@app.route('/register', methods=['POST'])
def register():
email = request.json.get('email')
result = verify_email(email)
if not result.get('valid') or result.get('score', 0) < 70:
return jsonify({'error': 'Invalid email address'}), 400
# proceed with registration
return jsonify({'success': True})Get your free API key (100 verifications included) at checkmail1.com.