The AJAX request that CF7 uses to send data reaches the server but the server returns a 500 status. This means a fatal error occurs while processing the request. The error stops the JSON response, so the form never shows a success message.
Typical triggers include security modules that block the REST endpoint, PHP code that crashes, or a plugin that interferes with the mail routine. When the error happens the spinner continues to spin and no email is sent.
Server logs often contain a PHP fatal error line or a ModSecurity rule match. WordPress debug logs may show an uncaught exception from a CF7 add‑on. The problem is not visible in the front‑end UI.