import {FAQSection, Footer, Navbar, SectionHeader} from '../../components'; import {motion} from 'framer-motion'; import {DASHBOARD_URI} from '../../lib/constants'; import React, {useState} from 'react'; import {NextSeo} from 'next-seo'; import {AlertTriangle, ArrowRight, CheckCircle, ShieldAlert, XCircle} from 'lucide-react'; import {Button, Input} from '@plunk/ui'; import {Bricolage_Grotesque, Hanken_Grotesk, JetBrains_Mono} from 'next/font/google'; import Link from 'next/link'; import type {FAQ} from '../../components/FAQSection'; const display = Bricolage_Grotesque({ subsets: ['latin'], variable: '--font-display', display: 'swap', weight: ['400', '500', '600', '700', '800'], }); const body = Hanken_Grotesk({ subsets: ['latin'], variable: '--font-body', display: 'swap', weight: ['400', '500', '600', '700'], }); const mono = JetBrains_Mono({ subsets: ['latin'], variable: '--font-mono', display: 'swap', weight: ['400', '500'], }); const SPAM_TRIGGER_WORDS = [ 'act now', 'act immediately', 'action required', 'apply now', 'apply online', 'as seen on', 'avoid bankruptcy', 'be your own boss', 'being a member', 'big bucks', 'bill 1618', 'billion dollars', 'bonus', 'buy direct', 'buy now', 'buyer protection', 'buying judgments', 'call free', 'call now', 'cancel at any time', 'can\'t live without', 'cash bonus', 'cash prize', 'celebrate', 'cent on the dollar', 'chance', 'cheap', 'check now', 'claim now', 'claim your', 'click below', 'click here', 'click now', 'click to remove', 'compare rates', 'compete for your business', 'congratulations', 'consolidate debt', 'copy accurately', 'copy dvds', 'deal', 'dear friend', 'earn per week', 'earn extra cash', 'earn extra income', 'eliminate bad credit', 'eliminate debt', 'excl', 'exclusive deal', 'exclusive offer', 'extra cash', 'extra income', 'f r e e', 'fantastic deal', 'fast cash', 'financial freedom', 'find out anything', 'for free', 'for just $', 'for only $', 'free access', 'free bonus', 'free cell phone', 'free consultation', 'free gift', 'free grant money', 'free info', 'free installation', 'free investment', 'free leads', 'free membership', 'free money', 'free offer', 'free preview', 'free prize', 'free quote', 'free sample', 'free trial', 'freedom', 'full refund', 'get it now', 'get out of debt', 'get paid', 'give it away', 'giving it away', 'great offer', 'guaranteed', 'hidden assets', 'hidden charges', 'home based business', 'hot deal', 'huge discount', 'incredible deal', 'incredible offer', 'information you requested', 'instant access', 'instant approval', 'insurance', 'it\'s effective', 'join millions', 'joining for free', 'junk mail', 'last chance', 'limited time', 'lose weight', 'lowest price', 'lowest rate', 'lucky winner', 'luxury car', 'luxury gift', 'make $', 'make money', 'make money fast', 'marketing solutions', 'mass email', 'meet singles', 'member', 'million dollars', 'miracle', 'money back', 'money making', 'monthly payment', 'mortgage', 'multi level marketing', 'name brand', 'new customer', 'new domain', 'now only', 'obligation free', 'off everything', 'offer expires', 'once in a lifetime', 'one hundred percent free', 'one hundred percent satisfied', 'open an account', 'opportunity', 'opt in', 'order now', 'order status', 'order today', 'outstanding values', 'pennies a day', 'per day', 'per month', 'per week', 'potential earnings', 'price protection', 'prices reduced', 'prize', 'profit', 'promise you', 'pure profit', 'refinance', 'refund', 'register for free', 'remove', 'reverses aging', 'risk free', 'satisfaction guaranteed', 'save big money', 'save up to', 'selected', 'serious cash', 'sign up free', 'special discount', 'special offer', 'special promotion', 'subject to credit', 'subscribe for free', 'super deal', 'supplies are limited', 'take action', 'tens of thousands', 'the best rates', 'time limited', 'trial offer', 'ultimate', 'unbeatable', 'unbelievable', 'urgent', 'valued customer', 'very cheap', 'want to make', 'while supplies last', 'winner', 'work at home', 'work from home', 'you are a winner', 'you have been selected', 'you have been chosen', 'you won', 'you\'ve won', 'your income', ]; interface SpamCheck { type: 'error' | 'warning' | 'pass'; label: string; detail: string; } interface SpamResult { score: number; checks: SpamCheck[]; triggeredWords: string[]; } function analyzeSpam(subject: string, body: string): SpamResult { const checks: SpamCheck[] = []; const triggeredWords: string[] = []; let deductions = 0; const fullText = `${subject} ${body}`.toLowerCase(); // Check for spam trigger words const foundWords = SPAM_TRIGGER_WORDS.filter(word => fullText.includes(word)); if (foundWords.length === 0) { checks.push({type: 'pass', label: 'No spam trigger words', detail: 'Your content does not contain common spam trigger phrases.'}); } else if (foundWords.length <= 2) { checks.push({type: 'warning', label: `${foundWords.length} spam trigger word${foundWords.length > 1 ? 's' : ''} found`, detail: `Found: ${foundWords.slice(0, 5).join(', ')}. Consider rephrasing these.`}); deductions += foundWords.length * 8; triggeredWords.push(...foundWords.slice(0, 5)); } else { checks.push({type: 'error', label: `${foundWords.length} spam trigger words found`, detail: `Found: ${foundWords.slice(0, 6).join(', ')}${foundWords.length > 6 ? ` and ${foundWords.length - 6} more` : ''}. Rewrite to use natural language.`}); deductions += Math.min(foundWords.length * 8, 45); triggeredWords.push(...foundWords.slice(0, 6)); } // Check subject line length if (subject.length === 0) { checks.push({type: 'error', label: 'Empty subject line', detail: 'A subject line is required. Missing subjects trigger spam filters.'}); deductions += 20; } else if (subject.length < 10) { checks.push({type: 'warning', label: 'Subject line too short', detail: 'Very short subjects may appear suspicious. Aim for 30–50 characters.'}); deductions += 5; } else if (subject.length > 70) { checks.push({type: 'warning', label: 'Subject line too long', detail: `${subject.length} characters. Subject lines over 70 characters are truncated and may reduce opens.`}); deductions += 5; } else { checks.push({type: 'pass', label: 'Good subject line length', detail: `${subject.length} characters — within the recommended 30–70 character range.`}); } // Check for excessive capitalization in subject const subjectWords = subject.split(' ').filter(w => w.length > 2); const capsWords = subjectWords.filter(w => w === w.toUpperCase() && /[A-Z]/.test(w)); if (capsWords.length > 2) { checks.push({type: 'error', label: 'Excessive capitalization in subject', detail: `"${capsWords.join('", "')}" — all-caps words look like shouting and trigger spam filters.`}); deductions += 15; } else if (capsWords.length > 0) { checks.push({type: 'warning', label: 'Capitalized words in subject', detail: `"${capsWords.join('", "')}" — use sentence case for a more professional appearance.`}); deductions += 5; } else { checks.push({type: 'pass', label: 'No excessive capitalization', detail: 'Subject line uses normal capitalization.'}); } // Check for excessive exclamation marks in subject const exclamationCount = (subject.match(/!/g) || []).length; if (exclamationCount > 1) { checks.push({type: 'error', label: 'Multiple exclamation marks in subject', detail: `${exclamationCount} exclamation marks found. Multiple "!" are a strong spam signal.`}); deductions += 10; } else if (exclamationCount === 1) { checks.push({type: 'warning', label: 'Exclamation mark in subject', detail: 'A single exclamation mark is borderline. Prefer natural punctuation.'}); deductions += 3; } else { checks.push({type: 'pass', label: 'No excessive punctuation', detail: 'No exclamation marks in the subject line.'}); } // Check for $ in subject if (subject.includes('$')) { checks.push({type: 'warning', label: 'Dollar sign in subject', detail: 'The $ symbol in subject lines is a common spam trigger. Spell out "dollars" or reframe the message.'}); deductions += 8; } // Check for % in subject (common in discount spam) if (subject.includes('%')) { checks.push({type: 'warning', label: 'Percentage in subject', detail: 'Percentage symbols in subject lines are frequently associated with promotional spam.'}); deductions += 5; } // Check body length if (body.length > 0 && body.length < 50) { checks.push({type: 'warning', label: 'Very short email body', detail: 'Very short bodies with mostly links raise spam flags. Add more context and value.'}); deductions += 5; } else if (body.length >= 50) { checks.push({type: 'pass', label: 'Email body length acceptable', detail: 'Body content length looks reasonable for a legitimate email.'}); } const score = Math.max(0, 100 - deductions); return {score, checks, triggeredWords}; } function ScoreBadge({score}: {score: number}) { const color = score >= 80 ? 'text-green-700 bg-green-50 border-green-200' : score >= 60 ? 'text-amber-700 bg-amber-50 border-amber-200' : 'text-red-700 bg-red-50 border-red-200'; const label = score >= 80 ? 'Likely Clean' : score >= 60 ? 'Risky' : 'High Spam Risk'; return (
{score} {label}
); } const faqs: FAQ[] = [ { question: 'What is a spam checker?', answer: 'A spam checker analyzes email subject lines and content for characteristics that spam filters use to block or flag emails. It looks for spam trigger words, excessive capitalization, suspicious punctuation, and other signals that inbox providers associate with spam. Running your email through a spam checker before sending helps improve deliverability.', }, { question: 'What causes emails to go to spam?', answer: 'Emails land in spam for many reasons: spam trigger words in the subject or body, poor sender reputation, missing SPF/DKIM/DMARC authentication, sending to purchased or unengaged lists with high bounce rates, excessive links or images, HTML-to-text ratio issues, or being reported as spam by previous recipients. Authentication issues and sender reputation are the most common causes.', }, { question: 'How do I check if my email will be spam?', answer: 'Use a spam checker tool like this one to analyze your subject line and content. Also check your email authentication setup—verify that SPF, DKIM, and DMARC are correctly configured for your domain. Send test emails to spam testing services, and monitor your deliverability metrics (bounce rate, spam complaint rate) over time.', }, { question: 'What are spam trigger words?', answer: 'Spam trigger words are phrases commonly associated with spam emails. They include words like "free", "guaranteed", "act now", "click here", "make money", "winner", "prize", "urgent", and many others. Spam filters assign point values to these words, and emails exceeding a threshold score are flagged or blocked. Avoiding these words and using natural language improves deliverability.', }, { question: 'Is email authentication important for avoiding spam?', answer: 'Yes—email authentication (SPF, DKIM, DMARC) is critical. Without proper authentication, receiving mail servers have no way to verify your email is legitimate, making it more likely to be treated as spam. Since 2024, Gmail and Yahoo require DMARC authentication for bulk senders. Properly authenticated emails with a clean sender reputation reach the inbox far more reliably than unauthenticated emails.', }, ]; export default function SpamCheckerPage() { const [subject, setSubject] = useState(''); const [bodyText, setBodyText] = useState(''); const [result, setResult] = useState(null); const handleCheck = (e: React.FormEvent) => { e.preventDefault(); setResult(analyzeSpam(subject, bodyText)); }; return ( <>
{/* ========== HERO ========== */}
§ T-03  —  Tool ← All tools

Email spam
checker

Test your subject line and email content for spam trigger words, punctuation issues, and other factors that cause emails to land in spam folders.

{/* ========== CHECKER TOOL ========== */}
Analyze email content
setSubject(e.target.value)} placeholder="Your email subject line" required className={'w-full'} />