Agent skill

form-testing

Test WordPress form submissions and email delivery. Validates contact forms, checks WP Mail SMTP configuration, and sends test emails. Use when verifying form functionality or troubleshooting email delivery issues.

Stars 232
Forks 15

Install this agent skill to your Project

npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/crazyswami/form-testing

SKILL.md

Form Testing Skill

Comprehensive form testing for WordPress sites - validates form submissions, email delivery, and SMTP configuration.

Quick Start

bash
# Test WP Mail SMTP configuration
/root/.claude/skills/form-testing/scripts/test-mail.sh wordpress-container

# Test contact form submission
/root/.claude/skills/form-testing/scripts/test-form.sh https://site.com/contact/

# Full form audit
/root/.claude/skills/form-testing/scripts/audit-forms.sh wordpress-container

What This Skill Tests

1. Email Delivery

  • WP Mail SMTP plugin configuration
  • Email sending capability via wp_mail()
  • SMTP server connectivity
  • Email headers and formatting

2. Contact Form Functionality

  • Form field validation
  • Nonce verification
  • Success/error redirects
  • Email receipt

3. Form Security

  • CSRF protection (nonces)
  • Input sanitization
  • Spam protection (if applicable)

Testing Methods

Method 1: WP-CLI Email Test

The most reliable way to test email delivery:

bash
# Send test email via WP-CLI
docker exec wordpress-container wp eval '
$to = "test@example.com";
$subject = "WordPress Test Email";
$message = "This is a test email from WordPress at " . date("Y-m-d H:i:s");
$headers = array("Content-Type: text/plain; charset=UTF-8");

$result = wp_mail($to, $subject, $message, $headers);

if ($result) {
    echo "SUCCESS: Email sent to $to\n";
} else {
    echo "FAILED: Could not send email\n";
    global $phpmailer;
    if (isset($phpmailer)) {
        echo "Error: " . $phpmailer->ErrorInfo . "\n";
    }
}
'

Method 2: Check SMTP Configuration

bash
# Check WP Mail SMTP options
docker exec wordpress-container wp option get wp_mail_smtp --format=json | jq

# Check if SMTP is configured
docker exec wordpress-container wp eval '
$options = get_option("wp_mail_smtp");
if (!empty($options["smtp"]["host"])) {
    echo "SMTP Host: " . $options["smtp"]["host"] . "\n";
    echo "SMTP Port: " . $options["smtp"]["port"] . "\n";
    echo "SMTP Auth: " . ($options["smtp"]["auth"] ? "Yes" : "No") . "\n";
    echo "Encryption: " . $options["smtp"]["encryption"] . "\n";
} else {
    echo "SMTP not configured - using PHP mail()\n";
}
'

Method 3: HTTP Form Submission Test

bash
# Test contact form via curl
curl -X POST "https://site.com/contact/" \
  -d "first_name=Test" \
  -d "last_name=User" \
  -d "email=test@example.com" \
  -d "message=This is a test submission" \
  -d "csr_contact_form=1" \
  -L -v 2>&1 | grep -E "(< HTTP|Location:|contact=)"

Automated Test Script

test-mail.sh

bash
#!/bin/bash
# Test email sending via WordPress

CONTAINER="${1:-wordpress}"
TO_EMAIL="${2:-admin@example.com}"

echo "Testing email delivery..."

docker exec "$CONTAINER" wp eval "
\$to = '$TO_EMAIL';
\$subject = 'Form Test - ' . date('Y-m-d H:i:s');
\$message = 'This is an automated test from the form-testing skill.\\n\\n';
\$message .= 'Site: ' . home_url() . '\\n';
\$message .= 'Time: ' . current_time('mysql') . '\\n';
\$message .= '\\nIf you receive this, email delivery is working!';

\$headers = array(
    'Content-Type: text/plain; charset=UTF-8',
    'From: WordPress <wordpress@' . parse_url(home_url(), PHP_URL_HOST) . '>'
);

echo 'Sending test email to: ' . \$to . \"\\n\";
\$result = wp_mail(\$to, \$subject, \$message, \$headers);

if (\$result) {
    echo \"SUCCESS: Test email sent!\\n\";
    echo \"Check inbox for: \$subject\\n\";
} else {
    echo \"FAILED: Could not send email\\n\";
    global \$phpmailer;
    if (isset(\$phpmailer) && !empty(\$phpmailer->ErrorInfo)) {
        echo \"PHPMailer Error: \" . \$phpmailer->ErrorInfo . \"\\n\";
    }
}
"

Troubleshooting

Email Not Sending

  1. Check WP Mail SMTP is active:

    bash
    docker exec wordpress wp plugin is-active wp-mail-smtp && echo "Active" || echo "Not active"
    
  2. Verify SMTP settings:

    bash
    docker exec wordpress wp option get wp_mail_smtp --format=json
    
  3. Test with debug logging:

    bash
    docker exec wordpress wp eval '
    define("WP_DEBUG", true);
    define("WP_DEBUG_LOG", true);
    wp_mail("test@example.com", "Debug Test", "Testing");
    '
    
  4. Check email log (if using WP Mail SMTP Pro):

    bash
    docker exec wordpress wp db query "SELECT * FROM wp_wpmailsmtp_logs ORDER BY id DESC LIMIT 5"
    

Form Submission Errors

  1. Check nonce verification:

    • Ensure form has wp_nonce_field()
    • Verify nonce name matches in handler
  2. Check redirect after submit:

    bash
    curl -X POST "https://site.com/contact/" \
      -d "form_data=here" \
      -L -w "%{redirect_url}" -o /dev/null -s
    
  3. Check for PHP errors:

    bash
    docker exec wordpress tail -50 /var/www/html/wp-content/debug.log
    

Common Issues

Issue Cause Solution
Emails go to spam Missing SPF/DKIM Configure DNS records
"Could not instantiate mail function" PHP mail disabled Use SMTP plugin
Form returns blank page PHP error Enable WP_DEBUG
Nonce verification failed Session expired or cache Check caching plugin
Form fields not received Missing name attributes Add name to inputs

WP Mail SMTP Configuration

Recommended Providers

  1. SMTP.com - Free tier, reliable
  2. SendGrid - 100 emails/day free
  3. Mailgun - Developer-friendly
  4. Amazon SES - Cheapest for volume
  5. Gmail SMTP - Quick setup (personal use)

Configuration via WP-CLI

bash
# Set up SMTP configuration
docker exec wordpress wp option update wp_mail_smtp '{
  "mail": {
    "from_email": "noreply@yoursite.com",
    "from_name": "Your Site",
    "mailer": "smtp"
  },
  "smtp": {
    "host": "smtp.example.com",
    "port": 587,
    "encryption": "tls",
    "auth": true,
    "user": "smtp-user",
    "pass": "smtp-password"
  }
}' --format=json

Form Types Tested

Contact Form (CSR Theme)

  • Template: page-contact.php
  • Handler: csr_handle_contact_form() in functions.php
  • Fields: first_name, last_name, email, message
  • Nonce: csr_contact_nonce
  • Success Redirect: ?contact=success

Property Inquiry Form (CSR Theme)

  • Template: single-property.php
  • Handler: csr_handle_inquiry_form() in functions.php
  • Fields: name, company, email, message, property_title
  • Nonce: csr_inquiry_nonce
  • Success Redirect: ?inquiry=success

Audit Report Template

When running a form audit, document:

markdown
## Form Audit Report - [Site Name]
**Date**: YYYY-MM-DD
**Auditor**: Claude

### Email Delivery
- [ ] WP Mail SMTP installed and active
- [ ] SMTP credentials configured
- [ ] Test email received successfully
- [ ] SPF/DKIM records in place (check via MXToolbox)

### Contact Form
- [ ] Form displays correctly
- [ ] All fields validate properly
- [ ] Nonce verification working
- [ ] Success message shown after submit
- [ ] Email received by admin
- [ ] Reply-to header set correctly

### Security
- [ ] CSRF protection (nonces) in place
- [ ] Input sanitization (sanitize_text_field, etc.)
- [ ] Email header injection prevention
- [ ] Rate limiting (if needed)

### Recommendations
1. ...
2. ...

Related Skills

  • wp-docker: WordPress container management
  • visual-qa: Visual testing after form changes
  • seo-optimizer: Check form pages for SEO
  • white-label: Admin branding for form notifications

Sources

Expand your agent's capabilities with these related and highly-rated skills.

aiskillstore/marketplace

perigon-backend

Perigon ASP.NET Core + EF Core + Aspire conventions

232 15
Explore
aiskillstore/marketplace

perigon-agent

Pointers for Copilot/agents to apply Perigon conventions

232 15
Explore
aiskillstore/marketplace

perigon-angular

Angular 21+ standalone/Material/signal conventions for Perigon WebApp

232 15
Explore
aiskillstore/marketplace

fastapi-mastery

Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.

232 15
Explore
aiskillstore/marketplace

context7-efficient

Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.

232 15
Explore
aiskillstore/marketplace

browser-use

Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.

232 15
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results