WordPress表单PHP处理异常:邮件发送与客户端响应问题排查
WordPress联系表单邮件发送及客户端响应问题解决
问题概述
WordPress站点的联系表单存在两个核心问题:
- 无法通过PHP发送邮件
- 客户端无法收到响应
移除代码开头的判断条件后问题仍存在,且未获取到相关服务器日志。
原实现代码
add_action('wp_ajax_nopriv_mail_before_submit', 'mail_before_submit'); add_action('wp_ajax_mail_before_submit', 'mail_before_submit'); function mail_before_submit() { $jsonRequest = json_decode(file_get_contents('php://input'), true); if (strcmp($jsonRequest['action'], 'contact_form') !== 0) { echo 'failure'; exit(1); }; $sendMail = wp_mail( get_option('admin_email'), sprintf('Kontaktformular von %1$s', $jsonRequest['name']), sprintf( 'Name: %1$s Email: %2$s Telefonnummer: %3$s Nachricht: %4$s JSON: %5$s', $jsonRequest['name'], $jsonRequest['email'], $jsonRequest['phone'], $jsonRequest['message'], json_encode($jsonRequest), ), sprintf('From: %1$s <"%2$s">', $jsonRequest['name'], $jsonRequest['email']), ); if ($sendMail) { echo 'success'; exit(); } echo 'failure'; exit(); }
排查与修复过程
1. 邮件发送失败修复
使用DDEV搭配VS Code分步调试后,定位到wp_mail函数的headers参数格式不符合邮件协议规范。将原headers代码:
sprintf('From: %1$s <"%2$s">', $jsonRequest['name'], $jsonRequest['email'])
替换为:
sprintf('From: %1$s', $jsonRequest['email'])
修改后邮件可正常发送至目标邮箱。
2. 客户端无响应修复
邮件功能恢复后,客户端仍无法收到响应。查看浏览器网络面板发现响应内容为空,原因是前端JavaScript未调用await response.text()(或其他处理响应内容的方法)。添加该处理逻辑后,客户端可正常获取success或failure响应,表单功能完全正常。
内容的提问来源于stack exchange,提问作者pgalle
相关产品推荐
相关产品推荐

