You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress simple_jwt_login插件钩子触发后未发送邮件问题排查

问题原因与排查方案

以下是该问题的常见诱因和可落地的分步排查路径:

高频触发失败原因

  • Simple JWT Login插件默认关闭登录钩子的触发开关,未手动开启的情况下,无论怎么挂载函数都不会执行
  • 钩子挂载时未声明接收参数、优先级设置不当,导致挂载失效
  • 测试时调用的不是Simple JWT Login原生的登录REST接口,钩子根本不会被触发
  • 发信逻辑未捕获返回值,SMTP校验拦截发信时无显性报错,同时未开启WP Debug模式看不到错误记录
  • 缓存/安全插件拦截REST请求,插件核心登录逻辑未执行

分步排查操作

1. 先验证钩子是否真实触发

先替换你当前的挂载代码,加入文件日志逻辑,跳过系统日志配置的依赖直接验证执行状态:

// 增加优先级参数、声明接收1个传入的用户对象参数
add_action('simple_jwt_login_login_hook', 'my_test', 10, 1);
function my_test($user = null) {
    // 写入钩子触发记录到wp-content目录下的自定义日志
    $log = sprintf(
        "[%s] 登录钩子触发 | 登录用户ID:%s | 登录用户邮箱:%s\n",
        current_time('mysql'),
        $user instanceof WP_User ? $user->ID : '无有效用户对象',
        $user instanceof WP_User ? $user->user_email : '无有效用户对象'
    );
    file_put_contents(WP_CONTENT_DIR . '/jwt_hook_test.log', $log, FILE_APPEND);

    // 原有发信逻辑,同时捕获返回值写入日志
    $to = 'you@yourmail.com';
    $subject = "Test mail";
    $message = "Hello! This is a simple email message.";
    $headers[] = 'Content-type: text/html; charset=utf-8';
    $headers[] = "From: me@email.com";

    $mail_send_result = wp_mail($to, $subject, $message, $headers);
    file_put_contents(
        WP_CONTENT_DIR . '/jwt_hook_test.log',
        "发信执行结果:" . var_export($mail_send_result, true) . "\n---\n",
        FILE_APPEND
    );
}

替换代码后,用Postman等无登录态的工具模拟外部应用调用登录接口,之后到wp-content目录下查看是否生成jwt_hook_test.log文件:

  • 没有生成日志文件:说明钩子完全没触发,走后续第2、3、5步排查
  • 有日志但发信结果为false:说明钩子正常触发,问题出在发信环节,走第4步排查

2. 检查插件钩子开关

进入WordPress后台Simple JWT Login的设置页面,找到Hooks配置板块,确认登录钩子对应的启用开关为打开状态,该选项插件默认为关闭状态,是此类问题最高发的诱因。

3. 确认登录接口正确性

确保你测试调用的REST接口是Simple JWT Login生成的原生登录端点(路径通常为/wp-json/simple-jwt-login/v1/login),自定义登录接口、其他JWT插件的登录接口都不会触发该插件的专属钩子。测试时不要使用已登录管理员账号的浏览器直接访问接口,避免权限校验、登录态判断跳过插件登录逻辑。

4. 排查发信环节故障

如果日志确认钩子正常触发但发信失败:

  • 核对代码里填写的发件人邮箱,和Easy SMTP中配置的发件域名保持一致,多数SMTP服务会校验发件人身份,域名不匹配时会直接拒信,且不会写入默认的系统日志
  • 临时创建一个测试页面,直接在页面模板中调用相同参数的wp_mail函数发信,确认SMTP服务本身工作正常
  • 开启WordPress原生Debug模式,在wp-config.php中添加如下配置,触发请求后查看wp-content/debug.log中的隐性报错:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

5. 排除插件拦截影响

临时禁用所有缓存插件、WAF安全插件、REST API类增强插件后再次测试,部分防护类插件会拦截匿名REST请求,或直接缓存REST接口响应,导致插件的登录逻辑完全不执行。


内容的提问来源于stack exchange,提问作者Rollor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:06:18