表单测试技能
WordPress网站综合表单测试 - 验证表单提交、电子邮件投递和SMTP配置。
快速开始
# 测试WP Mail SMTP配置
/root/.claude/skills/form-testing/scripts/test-mail.sh wordpress-container
# 测试联系表单提交
/root/.claude/skills/form-testing/scripts/test-form.sh https://site.com/contact/
# 全表单审计
/root/.claude/skills/form-testing/scripts/audit-forms.sh wordpress-container
这个技能测试什么
1. 电子邮件投递
- WP Mail SMTP插件配置
- 通过
wp_mail()发送电子邮件的能力 - SMTP服务器连接性
- 电子邮件头和格式化
2. 联系表单功能
- 表单字段验证
- 随机数验证
- 成功/错误重定向
- 电子邮件收据
3. 表单安全
- CSRF保护(随机数)
- 输入清理
- 垃圾邮件保护(如适用)
测试方法
方法1: WP-CLI电子邮件测试
测试电子邮件投递的最可靠方式:
# 通过WP-CLI发送测试电子邮件
docker exec wordpress-container wp eval '
$to = "test@example.com";
$subject = "WordPress测试电子邮件";
$message = "这是来自WordPress的测试电子邮件" . 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
";
} else {
echo "FAILED: Could not send email
";
global $phpmailer;
if (isset($phpmailer)) {
echo "Error: " . $phpmailer->ErrorInfo . "
";
}
}
'
方法2: 检查SMTP配置
# 检查WP Mail SMTP选项
docker exec wordpress-container wp option get wp_mail_smtp --format=json | jq
# 检查SMTP是否配置
docker exec wordpress-container wp eval '
$options = get_option("wp_mail_smtp");
if (!empty($options["smtp"]["host"])) {
echo "SMTP Host: " . $options["smtp"]["host"] . "
";
echo "SMTP Port: " . $options["smtp"]["port"] . "
";
echo "SMTP Auth: " . ($options["smtp"]["auth"] ? "Yes" : "No") . "
";
echo "Encryption: " . $options["smtp"]["encryption"] . "
";
} else {
echo "SMTP not configured - using PHP mail()
";
}
'
方法3: HTTP表单提交测试
# 通过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=)"
自动化测试脚本
test-mail.sh
#!/bin/bash
# 通过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.\
\
';
\$message .= 'Site: ' . home_url() . '\
';
\$message .= 'Time: ' . current_time('mysql') . '\
';
\$message .= '\
If 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 . \"\
\";
\$result = wp_mail(\$to, \$subject, \$message, \$headers);
if (\$result) {
echo \"SUCCESS: Test email sent!\
\";
echo \"Check inbox for: \$subject\
\";
} else {
echo \"FAILED: Could not send email\
\";
global \$phpmailer;
if (isset(\$phpmailer) && !empty(\$phpmailer->ErrorInfo)) {
echo \"PHPMailer Error: \" . \$phpmailer->ErrorInfo . \"\
\";
}
}
"
故障排除
电子邮件未发送
-
检查WP Mail SMTP是否激活:
docker exec wordpress wp plugin is-active wp-mail-smtp && echo "Active" || echo "Not active" -
验证SMTP设置:
docker exec wordpress wp option get wp_mail_smtp --format=json -
使用调试日志进行测试:
docker exec wordpress wp eval ' define("WP_DEBUG", true); define("WP_DEBUG_LOG", true); wp_mail("test@example.com", "Debug Test", "Testing"); ' -
检查电子邮件日志(如果使用WP Mail SMTP Pro):
docker exec wordpress wp db query "SELECT * FROM wp_wpmailsmtp_logs ORDER BY id DESC LIMIT 5"
表单提交错误
-
检查随机数验证:
- 确保表单有
wp_nonce_field() - 验证处理程序中的随机数名称匹配
- 确保表单有
-
检查提交后的重定向:
curl -X POST "https://site.com/contact/" \ -d "form_data=here" \ -L -w "%{redirect_url}" -o /dev/null -s -
检查PHP错误:
docker exec wordpress tail -50 /var/www/html/wp-content/debug.log
常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 电子邮件进入垃圾邮件 | 缺少SPF/DKIM | 配置DNS记录 |
| “无法实例化邮件功能” | PHP邮件被禁用 | 使用SMTP插件 |
| 表单返回空白页面 | PHP错误 | 启用WP_DEBUG |
| 随机数验证失败 | 会话过期或缓存 | 检查缓存插件 |
| 表单字段未收到 | 缺少名称属性 | 添加名称到输入 |
WP Mail SMTP配置
推荐提供商
- SMTP.com - 免费层,可靠
- SendGrid - 每天100封电子邮件免费
- Mailgun - 开发者友好
- Amazon SES - 体积最便宜
- Gmail SMTP - 快速设置(个人使用)
通过WP-CLI配置
# 设置SMTP配置
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
测试表单类型
联系表单(CSR主题)
- 模板:
page-contact.php - 处理程序:
csr_handle_contact_form()在functions.php中 - 字段: first_name, last_name, email, message
- 随机数:
csr_contact_nonce - 成功重定向:
?contact=success
物业查询表单(CSR主题)
- 模板:
single-property.php - 处理程序:
csr_handle_inquiry_form()在functions.php中 - 字段: name, company, email, message, property_title
- 随机数:
csr_inquiry_nonce - 成功重定向:
?inquiry=success
审计报告模板
运行表单审计时,记录:
## 表单审计报告 - [网站名称]
**日期**: YYYY-MM-DD
**审计员**: Claude
### 电子邮件投递
- [ ] WP Mail SMTP已安装并激活
- [ ] SMTP凭据配置
- [ ] 测试电子邮件成功接收
- [ ] SPF/DKIM记录到位(通过MXToolbox检查)
### 联系表单
- [ ] 表单正确显示
- [ ] 所有字段正确验证
- [ ] 随机数验证工作
- [ ] 提交后显示成功消息
- [ ] 管理员收到电子邮件
- [ ] 回复至标题设置正确
### 安全
- [ ] CSRF保护(随机数)到位
- [ ] 输入清理(sanitize_text_field等)
- [ ] 电子邮件标题注入防护
- [ ] 速率限制(如需要)
### 建议
1. ...
2. ...
相关技能
- wp-docker: WordPress容器管理
- visual-qa: 表单更改后的视觉测试
- seo-optimizer: 检查表单页面的SEO
- white-label: 表单通知的管理员品牌化