From 4e03dc5ecaddc8eed102a9acdfb71a53e0c5cb62 Mon Sep 17 00:00:00 2001 From: cschantz Date: Fri, 6 Feb 2026 16:02:47 -0500 Subject: [PATCH] feat(email): Add auto-IP extraction and pre-filled blacklist lookup URLs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Automatically extract server IP from rejection messages - Generate pre-filled lookup URLs for top blacklists - URLs include extracted IP for instant status checking: • Spamhaus: https://check.spamhaus.org/?ip=1.2.3.4 • Barracuda: https://www.barracudacentral.org/rbl/lookup?ip=1.2.3.4 • SpamCop: https://www.spamcop.net/query.html?ip=1.2.3.4 • SORBS: http://www.sorbs.net/lookup.shtml?ip=1.2.3.4 - Users no longer need to manually copy IP and search - Fallback to generic URLs if IP not found in message - Tested with various IP formats and edge cases User benefit: Instant access to blacklist status via clickable links Co-Authored-By: Claude Haiku 4.5 --- modules/email/email-diagnostics.sh | 33 +++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/modules/email/email-diagnostics.sh b/modules/email/email-diagnostics.sh index 71243c1..b2f3f28 100755 --- a/modules/email/email-diagnostics.sh +++ b/modules/email/email-diagnostics.sh @@ -568,6 +568,12 @@ if [ "$bounced" -gt 0 ]; then TEMP_BLACKLISTS="/tmp/email_blacklists_$$.txt" grep -iE "blacklist|block list|RBL|DNSBL|listed in|blocked using|on our block list|S3150|S3140|AS\(48|CS01|local policy|gmail.*(suspicious|reputation|spam|detected).*reputation|gmail.*detected.*suspicious|spamhaus|barracuda|spamcop|sorbs|abuseat|yahoo.*block|yahoo.*reject|aol.*block|aol.*reject|me\.com.*reject|icloud.*reject|mac\.com.*reject|protonmail.*block|protonmail.*reject|pm\.me.*reject|zoho.*block|zoho.*reject|fastmail.*block|fastmail.*reject|outlook.*block|hotmail.*block|live\.com.*block|msn\.com.*block" "$TEMP_BOUNCES" > "$TEMP_BLACKLISTS" 2>/dev/null || true + # Try to extract server IP from rejection messages + extracted_ip="" + if grep -qiE '\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\]|from [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' "$TEMP_BLACKLISTS" 2>/dev/null; then + extracted_ip=$(grep -oE '\[?[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\]?' "$TEMP_BLACKLISTS" 2>/dev/null | head -1 | tr -d '[]') + fi + if [ -s "$TEMP_BLACKLISTS" ]; then # Blacklist/Provider detection with real-world message patterns # Format: "name|display_name|removal_url|detection_keywords" @@ -627,10 +633,35 @@ if [ "$bounced" -gt 0 ]; then if [ -n "$detected_blacklists" ]; then print_warning " ⚠ SPECIFIC BLACKLISTS/BLOCKS DETECTED:" echo "" + if [ -n "$extracted_ip" ]; then + print_info " Server IP detected: $extracted_ip" + echo "" + fi echo -e "$detected_blacklists" | sort -u | while IFS='|' read -r bl_name bl_url; do if [ -n "$bl_name" ]; then print_error " • $bl_name" - echo " Removal/Info: $bl_url" + # Generate IP-specific lookup URL if IP was extracted + if [ -n "$extracted_ip" ]; then + case "$bl_url" in + *spamhaus.org*) + echo " Lookup: https://check.spamhaus.org/?ip=${extracted_ip}" + ;; + *barracudacentral.org*) + echo " Lookup: https://www.barracudacentral.org/rbl/lookup?ip=${extracted_ip}" + ;; + *spamcop.net*) + echo " Lookup: https://www.spamcop.net/query.html?ip=${extracted_ip}" + ;; + *sorbs.net*) + echo " Lookup: http://www.sorbs.net/lookup.shtml?ip=${extracted_ip}" + ;; + *) + echo " Removal/Info: $bl_url" + ;; + esac + else + echo " Removal/Info: $bl_url" + fi echo "" fi done