SELECT email FROM subscribers WHERE status='confirmed' AND last_open_at > NOW() - INTERVAL 30 DAY ORDER BY last_open_at DESC LIMIT 2000;
活动邮件群发完,打开率只有 6.2%,后台显示前 8000 个收件人里 3100 个是九十天没打开过的地址,新订阅的两千多人排在队列末尾,活动结束才发到。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:取名单的 SQL 只写了 ORDER BY created_at ASC 加 LIMIT 10000,先入库的老地址永远排在前面。服务商按批次计算信誉,前面的高退信把整批带下水。
这次卡住的地方就在「发送名单优先级」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
处理上按这个顺序:把最近三十天有打开记录的地址提到第一批,其余按最后活跃时间倒序;发送前排除连续三次硬退信的地址,别让它们占第一批配额;每批发完看一次退信率,超过 5% 就停下来清名单。
确认没问题再收工,第一批两千个地址的退信率降到 1% 以下,新订阅用户在活动当天收到邮件。
