Registration and account emails can fail even when contact forms work because they are triggered by different WordPress/WooCommerce events, templates and recipient data. Prove the account event fired, then trace the message independently from form notifications.
Identify the exact account event
New user, password change, email change and WooCommerce account events use different notifications. Reproduce only the missing one.
Confirm the recipient stored on the account
Check the normalized user/customer email and whether a plugin overrides it or suppresses notifications for imported accounts.
Inspect hooks and template overrides
Security, membership, ecommerce or white-label plugins can disable core notifications or replace their content.
Trace the mail event
Use timestamp/message ID and a controlled account. A form test email does not prove the account-mail hook reaches the transport.
Check provider status and suppression
Look for bounce, suppression, policy rejection or recipient filtering, especially after repeated automated tests.
Verify links and canonical host
Account/login/reset links should use the current HTTPS host and expected locale; migration residue can make a delivered message unusable.
Use wp_mail accepted but not delivered and the browser-to-mailbox trace as independent checks.
Maintain an account-event test matrix
Keep one controlled test for new registration, password reset, email change and any ecommerce/account event the site relies on. For each, record whether the event fired, mail was generated, provider accepted it and the link worked. This prevents a successful password-reset test from being treated as proof that registration notifications use the same hook and template path.