Mandrill邮件持续处于队列状态无法发送问题求助
我之前帮不少开发者解决过类似的问题,结合你用Parse Cloud Code + Back4App + Mandrill的场景,邮件一直卡在队列发不出去,大概率是这几个环节出了问题,给你逐一梳理:
Mandrill账户状态异常
先优先检查你的Mandrill账户:有没有触发反垃圾邮件机制?比如近期发送量突然暴涨、收件人投诉率过高,Mandrill会临时限制发送权限,把邮件放进队列但不实际投递。另外,免费版账户有没有达到月度发送额度?或者账户是否未完成邮箱验证/域名认证,导致核心发送功能受限。Parse Cloud Code的请求配置漏洞
确认你调用Mandrill API时的参数是否踩了坑:- 发件邮箱
from_email必须是在Mandrill后台已经验证过的域名或邮箱地址,否则Mandrill会直接拦截邮件,只显示队列状态。 - 收件人地址格式是否合法?有没有拼写错误,或者收件人邮箱本身是无效/不存在的?Mandrill对这类收件人会先放进队列,后续检测到后直接丢弃,但状态不会更新。
- 检查请求里的
async参数,如果设为true,Mandrill会异步处理邮件,但如果账户有问题,异步任务就会一直挂着。建议临时改成false,同步获取错误响应,这样能直接拿到具体的失败原因,比看队列状态有用多了。
- 发件邮箱
Back4App的环境限制或配置问题
Back4App作为Parse托管平台,可能存在一些隐藏的限制:比如防火墙规则拦截了对Mandrill API的出站请求,或者请求频率超限导致Mandrill没收到完整指令。另外,一定要去Back4App的Cloud Code日志里翻一翻,有没有隐藏的错误——比如API密钥权限不足(比如你用的密钥只能发送模板邮件,但代码里调用了普通发送接口)、请求超时等,这些表面上可能显示代码执行正常,但实际请求已经失败了。Mandrill队列的特殊情况
极少数情况下,Mandrill的服务器可能出现局部故障导致队列积压,但你等了24小时还没变化,这种概率极低。可以试试在Mandrill后台手动触发队列重试,或者直接联系他们的支持团队,提供你的API请求ID,让他们帮你查具体的队列阻塞原因。
最后给你个快速排查的小技巧:先跳过Parse和Back4App,直接在Mandrill后台发送测试邮件。如果能正常发送,那问题肯定出在Parse Cloud Code或者Back4App的配置上;如果后台测试也发不出去,那就是Mandrill账户本身的问题,直接找他们的支持更高效。
内容的提问来源于stack exchange,提问作者Martin Erlic

