使用drewm/mailchimp-api取消订阅未触发默认告别邮件问题
我来帮你排查几个常见的坑,毕竟我也碰到过类似的情况:
混淆了“确认邮件”和“告别邮件”的设置
你提到勾选了「Send unsubscribe confirmations to subscribers」,但这个是用户主动点击邮件内取消链接时的确认邮件。而API触发的告别邮件对应的列表设置是**「Send goodbye emails to unsubscribed contacts」**,你需要去列表的「Settings > List name and defaults」或「Settings > Email notifications」里确认这个开关是否开启——这是最容易踩的误区!状态变化的前置条件
Mailchimp只会在用户状态从「subscribed」(或「pending」)切换到「unsubscribed」时触发告别邮件。如果用户当前已经是「unsubscribed」状态,你再调用接口设置同样的状态,系统不会重复发送邮件。可以先调用GET lists/$listId/members/$md5接口确认用户当前状态。参数传递的细节检查
虽然你的代码里写了'send_goodbye' => true,但要确认这个参数有没有被正确传递。可以开启drewm库的调试模式,查看实际发送的请求体:$mailchimp->debug = true;这样就能验证
send_goodbye是否确实在JSON payload里,有没有拼写错误(比如少写了一个e)。测试邮箱的限制
如果你用同一个测试邮箱反复测试,Mailchimp可能会因为重复操作停止发送邮件,或者邮件被扔进了垃圾邮箱。试试换一个全新的邮箱,或者检查测试邮箱的垃圾邮件文件夹。另外,如果邮箱在Mailchimp的「Cleaned」列表里,也不会收到邮件。发送延迟问题
有时候告别邮件不会即时发送,尤其是非高峰时段,可能需要等待5-10分钟。别着急,先等一会儿再检查邮箱。API请求方法的优化
虽然你用的是put方法,但Mailchimp的会员更新推荐用patch(部分更新)而非put(全量替换)。试试把代码改成:$result = $mailchimp->patch("lists/$listId/members/$md5", [ 'status' => 'unsubscribed', 'send_goodbye' => true ]);理论上
put不影响邮件触发,但patch更符合API设计规范,能避免潜在的字段覆盖问题。
内容的提问来源于stack exchange,提问作者Fernando Cunha

