SELECT u.email FROM users u LEFT JOIN unsubscribe x ON x.email = u.email WHERE x.email IS NULL AND u.status = 1;
退订用户投诉仍然收到促销邮件,抽查明细发现 1200 个地址在退订表里,但这次群发列表里也有。退订表有 4.8 万条,发送前没查。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,退订只写进了 unsubscribe 表,群发脚本读的是用户主表,两边没有关联。运营导名单时按最近登录时间筛,退订状态不在筛选条件里。黑名单同步靠人工,经常滞后。
「黑名单未过滤」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
处理上按这个顺序:发送前和退订表做一次 left join 排除命中项;把退订状态同步到用户主表 保持单一来源;群发任务加前置检查 命中黑名单直接剔除;每天对一次发送明细和退订表 有交集就告警。
改完只确认一件事:下一次群发的收件人和退订表交集为 0,抽查 50 个退订地址都没有收到邮件。
