Implement complete SPF/DKIM/DMARC validation and email deliverability testing
SPF/DKIM/DMARC Check: - Complete implementation to validate email authentication records - Checks SPF record for proper terminator and mechanisms - Checks DKIM record with common selector detection - Validates DMARC policy, alignment, and reporting - Tries common DKIM selectors (default, k1, k2, google, selector1, selector2) - Analyzes SPF/DKIM/DMARC strength (EXCELLENT/GOOD/PARTIAL/CRITICAL) - Provides actionable recommendations for missing records - Shows configuration examples for each authentication method Email Deliverability Test: - 5-step comprehensive deliverability testing - Step 1: Validates SPF/DKIM/DMARC records exist - Step 2: Tests SMTP connectivity to MX records - Step 3: Checks server IP against major blacklists (Spamhaus, SpamCop, Barracuda, SORBS, CBL) - Step 4: Validates reverse DNS (PTR record) configuration - Step 5: Sends actual test email to verify end-to-end delivery - Integrated blacklist detection with difficulty ratings - Links to related diagnostic tools - Provides troubleshooting guidance for failed tests Key Features: - User-friendly input prompts for domain and test recipient - Color-coded output (success, warning, error) - Comprehensive test summary with next steps - Integration with existing email diagnostics tools - Clear recommendations for each test result - Cross-references to blacklist-check, email-diagnostics, and mail-log-analyzer These tools complete the email infrastructure validation suite, allowing administrators to comprehensively validate email authentication, deliverability, and blacklist status from one integrated toolset. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,280 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Email Deliverability Test - Comprehensive Email Sending Validation
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Test email deliverability with authentication checks and blacklist detection
|
||||||
|
# Validates SPF/DKIM/DMARC, tests SMTP connection, checks blacklists
|
||||||
|
################################################################################
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
source "$SCRIPT_DIR/lib/common-functions.sh"
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
|
source "$SCRIPT_DIR/lib/email-functions.sh"
|
||||||
|
|
||||||
show_banner "Email Deliverability Test"
|
show_banner "Email Deliverability Test"
|
||||||
|
|
||||||
print_info "This module tests email sending and receiving"
|
# Get input from user
|
||||||
print_warning "Coming soon - Under development"
|
|
||||||
echo ""
|
echo ""
|
||||||
print_info "For now, use: echo 'Test' | mail -s 'Test' your@email.com"
|
read -p "Enter domain to test (e.g., example.com): " TARGET_DOMAIN
|
||||||
|
if [ -z "$TARGET_DOMAIN" ]; then
|
||||||
|
print_error "Domain required"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Enter test recipient email (will receive test email): " TEST_EMAIL
|
||||||
|
if [ -z "$TEST_EMAIL" ]; then
|
||||||
|
print_error "Recipient email required"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Enter sender email address (e.g., test@$TARGET_DOMAIN): " SENDER_EMAIL
|
||||||
|
if [ -z "$SENDER_EMAIL" ]; then
|
||||||
|
SENDER_EMAIL="test@$TARGET_DOMAIN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "Starting comprehensive deliverability test..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Test 1: Authentication Records Check
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "Step 1: Email Authentication Records"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# SPF Check
|
||||||
|
print_info "Checking SPF record..."
|
||||||
|
spf_record=$(dig +short TXT "$TARGET_DOMAIN" 2>/dev/null | grep "^\"v=spf1" | sed 's/"//g')
|
||||||
|
if [ -n "$spf_record" ]; then
|
||||||
|
print_success " ✓ SPF record found"
|
||||||
|
else
|
||||||
|
print_warning " ⚠ SPF record not found (may affect deliverability)"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# DKIM Check
|
||||||
|
print_info "Checking DKIM record..."
|
||||||
|
for sel in default k1 k2 google selector1 selector2; do
|
||||||
|
dkim_record=$(dig +short TXT "${sel}._domainkey.${TARGET_DOMAIN}" 2>/dev/null | grep "^\"v=DKIM1")
|
||||||
|
if [ -n "$dkim_record" ]; then
|
||||||
|
print_success " ✓ DKIM record found (selector: $sel)"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ -z "$dkim_record" ]; then
|
||||||
|
print_warning " ⚠ DKIM record not found (recommend enabling for better deliverability)"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# DMARC Check
|
||||||
|
print_info "Checking DMARC record..."
|
||||||
|
dmarc_record=$(dig +short TXT "_dmarc.${TARGET_DOMAIN}" 2>/dev/null | grep "^\"v=DMARC1" | sed 's/"//g')
|
||||||
|
if [ -n "$dmarc_record" ]; then
|
||||||
|
print_success " ✓ DMARC record found"
|
||||||
|
else
|
||||||
|
print_warning " ⚠ DMARC record not found (recommended for authentication monitoring)"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Test 2: SMTP Connection Test
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "Step 2: SMTP Connection Test"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_info "Testing SMTP connectivity..."
|
||||||
|
|
||||||
|
# Get MX records
|
||||||
|
MX_RECORDS=$(dig +short MX "$TARGET_DOMAIN" 2>/dev/null | head -5)
|
||||||
|
|
||||||
|
if [ -z "$MX_RECORDS" ]; then
|
||||||
|
print_error " ✗ No MX records found for $TARGET_DOMAIN"
|
||||||
|
echo " Cannot test SMTP connectivity"
|
||||||
|
else
|
||||||
|
print_success " ✓ MX records found:"
|
||||||
|
echo "$MX_RECORDS" | while read priority server; do
|
||||||
|
server=$(echo "$server" | sed 's/\.$//')
|
||||||
|
echo " • Priority $priority: $server"
|
||||||
|
|
||||||
|
# Try to connect to SMTP
|
||||||
|
if timeout 3 bash -c "echo 'QUIT' | nc -w 1 $server 25" &>/dev/null; then
|
||||||
|
print_success " ✓ SMTP port 25 responds"
|
||||||
|
else
|
||||||
|
print_warning " ⚠ SMTP port 25 not responding (may use port 587/465)"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Test 3: Blacklist Check (from email-diagnostics)
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "Step 3: Server IP Blacklist Check"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Get server's public IP
|
||||||
|
print_info "Detecting server IP address..."
|
||||||
|
SERVER_IP=$(curl -s ifconfig.me 2>/dev/null || curl -s icanhazip.com 2>/dev/null || echo "")
|
||||||
|
|
||||||
|
if [ -z "$SERVER_IP" ]; then
|
||||||
|
print_warning " ⚠ Could not detect server IP (skipping blacklist check)"
|
||||||
|
else
|
||||||
|
print_success " Server IP: $SERVER_IP"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check major blacklists
|
||||||
|
BLACKLISTS_DB=(
|
||||||
|
"zen.spamhaus.org|Spamhaus"
|
||||||
|
"bl.spamcop.net|SpamCop"
|
||||||
|
"bl.barracudacentral.org|Barracuda"
|
||||||
|
"dnsbl.sorbs.net|SORBS"
|
||||||
|
"cbl.abuseat.org|CBL"
|
||||||
|
)
|
||||||
|
|
||||||
|
print_info "Checking major blacklists..."
|
||||||
|
REVERSED_IP=$(echo $SERVER_IP | awk -F. '{print $4"."$3"."$2"."$1}')
|
||||||
|
|
||||||
|
listed=0
|
||||||
|
for entry in "${BLACKLISTS_DB[@]}"; do
|
||||||
|
IFS='|' read -r rbl_host rbl_name <<< "$entry"
|
||||||
|
|
||||||
|
if dig +short +timeout=2 "${REVERSED_IP}.${rbl_host}" A 2>/dev/null | grep -q .; then
|
||||||
|
print_error " ✗ $rbl_name: LISTED (may cause delivery issues)"
|
||||||
|
((listed++))
|
||||||
|
else
|
||||||
|
print_success " ✓ $rbl_name: Not listed"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $listed -gt 0 ]; then
|
||||||
|
echo ""
|
||||||
|
print_warning " ⚠ Your IP is listed on $listed blacklist(s)"
|
||||||
|
echo " Recommendation: Use blacklist-check tool for delisting options"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Test 4: Reverse DNS Check
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "Step 4: Reverse DNS (PTR Record) Check"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_info "Checking reverse DNS..."
|
||||||
|
if [ -n "$SERVER_IP" ]; then
|
||||||
|
PTR_RECORD=$(dig +short -x "$SERVER_IP" 2>/dev/null)
|
||||||
|
if [ -n "$PTR_RECORD" ]; then
|
||||||
|
print_success " ✓ PTR record found: $PTR_RECORD"
|
||||||
|
echo " Reverse DNS is properly configured"
|
||||||
|
else
|
||||||
|
print_error " ✗ PTR record not found"
|
||||||
|
echo " Recommendation: Contact your hosting provider to set reverse DNS"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_warning " ⚠ Could not determine server IP (skip PTR check)"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Test 5: Send Test Email
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "Step 5: Send Test Email"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_info "Composing and sending test email..."
|
||||||
|
|
||||||
|
# Create test email
|
||||||
|
TEST_EMAIL_FILE="/tmp/deliverability_test_$$.txt"
|
||||||
|
cat > "$TEST_EMAIL_FILE" << EMAILEOF
|
||||||
|
Subject: Email Deliverability Test from $TARGET_DOMAIN
|
||||||
|
From: $SENDER_EMAIL
|
||||||
|
To: $TEST_EMAIL
|
||||||
|
Date: $(date -R)
|
||||||
|
|
||||||
|
This is an automated email deliverability test from:
|
||||||
|
Domain: $TARGET_DOMAIN
|
||||||
|
Server IP: ${SERVER_IP:-Unknown}
|
||||||
|
Timestamp: $(date)
|
||||||
|
|
||||||
|
If you received this email, your email system is working correctly.
|
||||||
|
|
||||||
|
Check the email headers to verify:
|
||||||
|
- SPF authentication result
|
||||||
|
- DKIM signature
|
||||||
|
- DMARC alignment
|
||||||
|
|
||||||
|
---
|
||||||
|
Sent from Email Deliverability Test Tool
|
||||||
|
EMAILEOF
|
||||||
|
|
||||||
|
# Try to send email
|
||||||
|
if command -v sendmail &> /dev/null; then
|
||||||
|
if sendmail "$TEST_EMAIL" < "$TEST_EMAIL_FILE" 2>/dev/null; then
|
||||||
|
print_success " ✓ Test email sent successfully via sendmail"
|
||||||
|
echo " Recipient should receive email at: $TEST_EMAIL"
|
||||||
|
else
|
||||||
|
print_warning " ⚠ sendmail submission may have failed"
|
||||||
|
fi
|
||||||
|
elif command -v mail &> /dev/null; then
|
||||||
|
if echo "" | mail -s "Email Deliverability Test" -r "$SENDER_EMAIL" "$TEST_EMAIL" 2>/dev/null; then
|
||||||
|
print_success " ✓ Test email sent successfully via mail command"
|
||||||
|
echo " Recipient should receive email at: $TEST_EMAIL"
|
||||||
|
else
|
||||||
|
print_warning " ⚠ mail command submission may have failed"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_warning " ⚠ No mail sending utility found (sendmail/mail)"
|
||||||
|
echo " Email sending cannot be tested on this system"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$TEST_EMAIL_FILE"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Test Summary & Recommendations
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "Deliverability Test Summary"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "📧 Test Configuration:"
|
||||||
|
echo " Domain: $TARGET_DOMAIN"
|
||||||
|
echo " Sender: $SENDER_EMAIL"
|
||||||
|
echo " Recipient: $TEST_EMAIL"
|
||||||
|
if [ -n "$SERVER_IP" ]; then
|
||||||
|
echo " Server IP: $SERVER_IP"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "✅ Recommended Next Steps:"
|
||||||
|
echo ""
|
||||||
|
echo "1. Check recipient inbox for test email"
|
||||||
|
echo " Look for the email from $SENDER_EMAIL"
|
||||||
|
echo ""
|
||||||
|
echo "2. Review email headers:"
|
||||||
|
echo " - Verify 'Authentication-Results' header"
|
||||||
|
echo " - Check SPF, DKIM, DMARC results"
|
||||||
|
echo " - Look for any 'pass' or 'fail' indications"
|
||||||
|
echo ""
|
||||||
|
echo "3. If email didn't arrive:"
|
||||||
|
echo " - Check spam/junk folder"
|
||||||
|
echo " - Review mail server logs: tail -f /var/log/mail.log"
|
||||||
|
echo " - Use email-diagnostics tool: email-diagnostics"
|
||||||
|
echo " - Check blacklist status: blacklist-check"
|
||||||
|
echo ""
|
||||||
|
echo "4. For authentication issues:"
|
||||||
|
echo " - Validate records: spf-dkim-dmarc-check"
|
||||||
|
echo " - Analyze mail logs: mail-log-analyzer"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "🔗 Related Tools:"
|
||||||
|
echo " • email-diagnostics - Analyze specific email delivery issues"
|
||||||
|
echo " • blacklist-check - Check IP reputation on RBLs"
|
||||||
|
echo " • spf-dkim-dmarc-check - Validate authentication records"
|
||||||
|
echo " • mail-log-analyzer - Analyze mail server logs"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -1,6 +1,255 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# SPF/DKIM/DMARC Check - Email Authentication Records Validator
|
||||||
|
################################################################################
|
||||||
|
# Purpose: Check and validate SPF, DKIM, and DMARC records for a domain
|
||||||
|
# Shows detailed validation results with recommendations
|
||||||
|
################################################################################
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
source "$SCRIPT_DIR/lib/common-functions.sh"
|
source "$SCRIPT_DIR/lib/common-functions.sh"
|
||||||
show_banner "spf dkim dmarc check"
|
source "$SCRIPT_DIR/lib/system-detect.sh"
|
||||||
print_warning "This module is under development"
|
|
||||||
|
show_banner "SPF/DKIM/DMARC Email Authentication Check"
|
||||||
|
|
||||||
|
# Get domain from user
|
||||||
|
echo ""
|
||||||
|
read -p "Enter domain to check (e.g., example.com): " TARGET_DOMAIN
|
||||||
|
|
||||||
|
if [ -z "$TARGET_DOMAIN" ]; then
|
||||||
|
print_error "Domain required"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "Checking email authentication records for: $TARGET_DOMAIN"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# SPF Check
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
check_spf() {
|
||||||
|
local domain="$1"
|
||||||
|
local spf_record=$(dig +short TXT "$domain" 2>/dev/null | grep "^\"v=spf1")
|
||||||
|
|
||||||
|
if [ -z "$spf_record" ]; then
|
||||||
|
print_error " ✗ SPF record NOT FOUND"
|
||||||
|
echo " Risk: Server may not have SPF authentication"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
print_success " ✓ SPF record found"
|
||||||
|
# Clean up the dig output
|
||||||
|
spf_record=$(echo "$spf_record" | sed 's/"//g')
|
||||||
|
echo " Record: $spf_record"
|
||||||
|
|
||||||
|
# Validate SPF record
|
||||||
|
if echo "$spf_record" | grep -q "~all\|?all"; then
|
||||||
|
print_success " ✓ SPF has proper terminator (~all or ?all)"
|
||||||
|
elif echo "$spf_record" | grep -q "\-all"; then
|
||||||
|
print_warning " ⚠ SPF uses strict -all (may reject legitimate mail)"
|
||||||
|
else
|
||||||
|
print_warning " ⚠ SPF missing proper terminator (no ~all)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for common SPF mechanisms
|
||||||
|
echo " Mechanisms found:"
|
||||||
|
echo "$spf_record" | grep -o "\b[a-z]*:[^ \"]*" | while read mech; do
|
||||||
|
echo " • $mech"
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# DKIM Check
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
check_dkim() {
|
||||||
|
local domain="$1"
|
||||||
|
local selector="default"
|
||||||
|
|
||||||
|
# Try common selectors
|
||||||
|
for sel in default k1 k2 google selector1 selector2; do
|
||||||
|
local dkim_record=$(dig +short TXT "${sel}._domainkey.${domain}" 2>/dev/null | grep "^\"v=DKIM1")
|
||||||
|
if [ -n "$dkim_record" ]; then
|
||||||
|
selector="$sel"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
local dkim_record=$(dig +short TXT "${selector}._domainkey.${domain}" 2>/dev/null | grep "^\"v=DKIM1")
|
||||||
|
|
||||||
|
if [ -z "$dkim_record" ]; then
|
||||||
|
print_error " ✗ DKIM record NOT FOUND (tried selector: $selector)"
|
||||||
|
echo " Recommendation: Check your DKIM setup with selector name"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
print_success " ✓ DKIM record found (selector: $selector)"
|
||||||
|
dkim_record=$(echo "$dkim_record" | sed 's/"//g')
|
||||||
|
|
||||||
|
# Extract key components
|
||||||
|
if echo "$dkim_record" | grep -q "p="; then
|
||||||
|
print_success " ✓ Public key (p=) present"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$dkim_record" | grep -q "h=sha256"; then
|
||||||
|
print_success " ✓ Using SHA256 hashing (recommended)"
|
||||||
|
elif echo "$dkim_record" | grep -q "h=sha1"; then
|
||||||
|
print_warning " ⚠ Using SHA1 (consider upgrading to SHA256)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$dkim_record" | grep -q "t=y"; then
|
||||||
|
print_info " ℹ Testing mode enabled (t=y)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Selector: $selector"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# DMARC Check
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
check_dmarc() {
|
||||||
|
local domain="$1"
|
||||||
|
local dmarc_record=$(dig +short TXT "_dmarc.${domain}" 2>/dev/null | grep "^\"v=DMARC1")
|
||||||
|
|
||||||
|
if [ -z "$dmarc_record" ]; then
|
||||||
|
print_error " ✗ DMARC record NOT FOUND"
|
||||||
|
echo " Recommendation: Implement DMARC policy for maximum protection"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
print_success " ✓ DMARC record found"
|
||||||
|
dmarc_record=$(echo "$dmarc_record" | sed 's/"//g')
|
||||||
|
echo " Record: $dmarc_record"
|
||||||
|
|
||||||
|
# Analyze DMARC policy
|
||||||
|
if echo "$dmarc_record" | grep -q "p=reject"; then
|
||||||
|
print_success " ✓ Policy: REJECT (strict enforcement)"
|
||||||
|
elif echo "$dmarc_record" | grep -q "p=quarantine"; then
|
||||||
|
print_warning " ⚠ Policy: QUARANTINE (less strict)"
|
||||||
|
elif echo "$dmarc_record" | grep -q "p=none"; then
|
||||||
|
print_warning " ⚠ Policy: NONE (monitoring only, no enforcement)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check for reporting
|
||||||
|
if echo "$dmarc_record" | grep -q "rua="; then
|
||||||
|
print_success " ✓ Aggregate reports enabled (rua=)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$dmarc_record" | grep -q "ruf="; then
|
||||||
|
print_success " ✓ Forensic reports enabled (ruf=)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check alignment
|
||||||
|
if echo "$dmarc_record" | grep -q "aspf=strict"; then
|
||||||
|
print_success " ✓ SPF alignment: STRICT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo "$dmarc_record" | grep -q "adkim=strict"; then
|
||||||
|
print_success " ✓ DKIM alignment: STRICT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Main Checks
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "SPF (Sender Policy Framework)"
|
||||||
|
check_spf "$TARGET_DOMAIN"
|
||||||
|
spf_status=$?
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_header "DKIM (DomainKeys Identified Mail)"
|
||||||
|
check_dkim "$TARGET_DOMAIN"
|
||||||
|
dkim_status=$?
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
print_header "DMARC (Domain-based Message Authentication, Reporting & Conformance)"
|
||||||
|
check_dmarc "$TARGET_DOMAIN"
|
||||||
|
dmarc_status=$?
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Summary & Recommendations
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_header "Authentication Summary"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
print_info "Status Overview:"
|
||||||
|
|
||||||
|
if [ $spf_status -eq 0 ]; then
|
||||||
|
echo " ✓ SPF: Implemented"
|
||||||
|
else
|
||||||
|
echo " ✗ SPF: Missing"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $dkim_status -eq 0 ]; then
|
||||||
|
echo " ✓ DKIM: Implemented"
|
||||||
|
else
|
||||||
|
echo " ✗ DKIM: Missing"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $dmarc_status -eq 0 ]; then
|
||||||
|
echo " ✓ DMARC: Implemented"
|
||||||
|
else
|
||||||
|
echo " ✗ DMARC: Missing"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🔐 Authentication Strength:"
|
||||||
|
|
||||||
|
if [ $spf_status -eq 0 ] && [ $dkim_status -eq 0 ] && [ $dmarc_status -eq 0 ]; then
|
||||||
|
print_success " ✓ EXCELLENT: All three authentication methods implemented"
|
||||||
|
echo " Your domain has maximum email authentication protection"
|
||||||
|
elif [ $spf_status -eq 0 ] && [ $dkim_status -eq 0 ]; then
|
||||||
|
print_warning " ⚠ GOOD: SPF and DKIM implemented (DMARC recommended)"
|
||||||
|
echo " Add DMARC for complete protection and reporting"
|
||||||
|
elif [ $spf_status -eq 0 ] || [ $dkim_status -eq 0 ]; then
|
||||||
|
print_warning " ⚠ PARTIAL: Only one authentication method active"
|
||||||
|
echo " Implement both SPF and DKIM for better deliverability"
|
||||||
|
else
|
||||||
|
print_error " ✗ CRITICAL: No authentication methods found"
|
||||||
|
echo " Email deliverability will be severely impacted"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📋 Recommendations:"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ $spf_status -ne 0 ]; then
|
||||||
|
echo " 1. Add SPF record:"
|
||||||
|
echo " - Go to your DNS provider"
|
||||||
|
echo " - Add TXT record for $TARGET_DOMAIN"
|
||||||
|
echo " - Example: v=spf1 include:_spf.google.com ~all"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $dkim_status -ne 0 ]; then
|
||||||
|
echo " 2. Enable DKIM:"
|
||||||
|
echo " - Check your mail server control panel (cPanel/Plesk)"
|
||||||
|
echo " - Generate DKIM key for domain"
|
||||||
|
echo " - Add the TXT record to DNS"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $dmarc_status -ne 0 ]; then
|
||||||
|
echo " 3. Implement DMARC:"
|
||||||
|
echo " - Add TXT record for _dmarc.$TARGET_DOMAIN"
|
||||||
|
echo " - Start with p=none for monitoring"
|
||||||
|
echo " - Example: v=DMARC1;p=none;rua=mailto:postmaster@$TARGET_DOMAIN"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🔗 Additional Resources:"
|
||||||
|
echo " • Use email-diagnostics to check email delivery issues"
|
||||||
|
echo " • Use blacklist-check to verify IP reputation"
|
||||||
|
echo " • Monitor DMARC reports at your email provider"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
Reference in New Issue
Block a user