WordPress自定义注册成功后,引入HTML模板发送邮件失败求助
下面是针对性的排查步骤,逐一验证即可定位问题:
验证文件路径是否正确
plugin_dir_path(__FILE__)的输出路径取决于当前代码文件的位置。如果你的代码在插件子目录(比如/wp-content/plugins/custom-login/includes/register.php),那么这个函数会返回/wp-content/plugins/custom-login/includes/,拼接templates/signup-email.html后路径就会出错。
可以先临时添加路径调试代码,确认实际路径:$template_path = plugin_dir_path( __FILE__ ) . 'templates/signup-email.html'; var_dump($template_path); // 注册用户时查看控制台输出的路径是否正确若路径错误,改用插件根目录路径:
// 假设当前代码在插件根目录下的任意文件 $template_path = plugin_dir_path( dirname(__FILE__) ) . 'templates/signup-email.html';检查文件权限
服务器上signup-email.html文件权限不足会导致PHP无法读取,建议将文件权限设置为644,所在templates目录权限设置为755,确保Web服务器用户(如www-data、apache)拥有读取权限。简化HTML模板测试
复杂的HTML内容可能包含未闭合标签、特殊符号或触发垃圾邮件检测规则,先使用极简模板测试:<!DOCTYPE html> <html> <head><meta charset="UTF-8"></head> <body> <p>Hello {{USERNAME}}, welcome!</p> </body> </html>如果简化模板能正常发送,再逐步还原原模板内容,定位具体问题点。
开启调试模式查看错误日志
在wp-config.php中开启WordPress调试:define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);尝试注册后,查看
/wp-content/debug.log文件,里面会记录file_get_contents读取失败、wp_mail执行错误等关键信息。增加文件存在判断
避免因文件不存在导致邮件内容为空,添加判断逻辑:$template_path = plugin_dir_path( __FILE__ ) . 'templates/signup-email.html'; if (!file_exists($template_path)) { wp_send_json_error('邮件模板文件不存在,请检查路径'); } $message = file_get_contents($template_path); $message = str_replace( '{{USERNAME}}', $username, $message );排查邮件是否被拦截
部分情况下邮件实际已发送,但被收件人邮箱归为垃圾邮件。可以:- 将测试收件地址改为自己的常用邮箱,检查垃圾邮件文件夹
- 安装邮件日志插件(如WP Mail Logging),查看邮件的发送状态和内容详情
内容的提问来源于stack exchange,提问作者GorillaDev

