Initial skills documentation — 25 categories, all SKILL.md + references + scripts
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
## Apex WPForms SMTP Serialization Bug
|
||||
|
||||
**Root cause:** WP Mail SMTP stores passwords in PHP serialized format within the `wp_options` table. The serialized string has a length prefix (e.g., `s:13:` for 13 characters). If the declared length doesn't match the actual password string length, the plugin cannot deserialize the password and **ALL form email delivery fails silently**.
|
||||
|
||||
**Affected configuration:** `option_name = 'wp_mail_smtp'`, stored in `wp_options` table.
|
||||
|
||||
**The bug:** The password `apex.track!!` is 13 characters. The stored value had `s:72` instead of `s:13` — likely caused by a pre-save sanitization or paste issue. WP Mail SMTP read `s:72` and expected a 72-character string, found fewer characters, and failed with a PHP warning that never surfaced to the UI.
|
||||
|
||||
**Diagnosis:**
|
||||
1. Check the stored password: `SELECT option_value FROM wp_options WHERE option_name = 'wp_mail_smtp'`
|
||||
2. Search for `smtp.pass` in the serialized data
|
||||
3. Count the actual password length and compare to the serialized `s:N` prefix
|
||||
|
||||
**Fix (verified Jul 8, 2026):**
|
||||
```sql
|
||||
UPDATE wp_options
|
||||
SET option_value = REPLACE(
|
||||
option_value,
|
||||
's:72:"apex.track!!"',
|
||||
's:13:"apex.track!!"'
|
||||
)
|
||||
WHERE option_name = 'wp_mail_smtp';
|
||||
```
|
||||
|
||||
**Also fix sender_address on forms:**
|
||||
Both Form 270 (NASA Top Speed) and Form 268 (Waiver) had comma-separated email addresses in the `sender_address` notification field. This produces an invalid `From:` email header. Set `sender_address` to a single email address (e.g., `contact@apextrackexperience.com`).
|
||||
|
||||
**Verification:**
|
||||
1. Send a test email from the WP Mail SMTP settings page
|
||||
2. Check debug events table: `SELECT * FROM wp_wpmailsmtp_debug_events ORDER BY id DESC LIMIT 10`
|
||||
3. Submit a test WPForms entry and verify the notification arrives
|
||||
4. Enable the 5-min watchdog script
|
||||
|
||||
**Resending missed notifications:**
|
||||
After fixing the serialization, previously failed form entries won't auto-resend. Check `wp_wpforms_entries` for entries with no corresponding email notification. Manually re-send via SMTP Python script.
|
||||
|
||||
**Watchdog script** at `/root/.hermes/scripts/apex-mail-watchdog.sh` runs every 5 minutes via no_agent cron. It:
|
||||
- Tests SMTP LOGIN authenticity (no test email sent — just `s.login()` then `s.quit()`)
|
||||
- Queries `wp_wpmailsmtp_debug_events` for recent failures
|
||||
- Silent on success, alerts on failure
|
||||
- **CRITICAL:** `log()` function uses `>> "$LOG"` not `tee -a "$LOG"` to prevent every log line from being delivered as a cron message
|
||||
Reference in New Issue
Block a user