DELETE FROM wp_mail_queue
WHERE email = 'user@example.com' AND status = 'pending';

用户点了退订,页面提示成功,第二天照样收到群发邮件,连续三周都是这样,名单里他的状态已经是退订。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:退订只改了订阅表的状态,发送队列是另一张表,入队时就把收件人定死了。队列按批次消费,入队后不再回查状态。发送脚本还缓存了整份名单,跑完这一轮才会重新读。

「退订不生效」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。同一份配置存在多处的,先确认改的是被加载的那一份。

处理上按这个顺序:发送前按订阅状态再过滤一次,别只信入队时的快照;退订时把队列里未发送的记录一并删掉或标记跳过;发送脚本每批重新读名单,不要一次加载全部收件人。

确认没问题再收工,退订后当天和次日的群发都不再包含该地址,队列里也没有残留记录。

作者 9823189