Mailcoach Laravel 营销活动加载停滞无法发送问题求助
Mailcoach营销活动加载停滞/无法发送的排查方案
1. 检查Mailcoach专属队列任务状态
- 执行
php artisan queue:work --queue=mailcoach --once手动触发Mailcoach队列任务,观察是否有报错信息 - 确认队列Worker是否监听了
mailcoach队列:默认Mailcoach会将任务投递到mailcoach队列,若你的Worker仅监听默认队列,会导致任务积压 - 执行
php artisan mailcoach:run-scheduled-campaigns手动触发待发送的营销活动,查看是否能正常启动发送流程
2. 排查数据库中的活动状态与锁
- 查看
mailcoach_campaigns表,检查目标活动的status字段:若卡在sending状态,可能是任务中断导致的锁残留 - 检查
mailcoach_campaigns表的locked_at字段,若有值且超过合理时长,手动清空该字段,将活动状态重置为scheduled后重试 - 查看
mailcoach_message_jobs表,是否存在大量未处理或失败的任务,可尝试删除失败任务后重新触发活动
3. 验证队列驱动的运行细节
- 若使用Redis队列,执行
redis-cli KEYS "*queue*"查看mailcoach队列的积压情况,确认是否有未消费的任务 - 若使用数据库队列,查看
jobs表中queue字段为mailcoach的记录,检查reserved_at字段是否有长时间未释放的任务,手动将其设为NULL释放锁 - 查看Worker专属日志(如
storage/logs/queue-worker.log),而非仅服务器日志,可能存在未被捕获的任务错误
4. 清除缓存与重置配置
- 执行
php artisan cache:clear、php artisan config:clear清除系统缓存,避免旧配置残留 - 重新发布Mailcoach配置文件:
php artisan vendor:publish --tag=mailcoach-config,确认mailcoach.php中queue配置项为mailcoach或指定的队列名称 - 执行
php artisan mailcoach:clear-cache清除Mailcoach自身缓存
5. 测试基础发送能力
- 创建测试路由,验证单个邮件发送逻辑是否正常:
Route::get('/test-mailcoach', function () { $campaign = \Spatie\Mailcoach\Models\Campaign::find(1); $subscriber = \Spatie\Mailcoach\Models\Subscriber::first(); \Spatie\Mailcoach\Facades\Mailcoach::sendCampaignToSubscriber($campaign, $subscriber); return '测试邮件已触发'; }); - 访问该路由,观察是否有报错,同时检查邮件是否成功发送,排查是否是活动模板语法错误导致的阻塞
6. 检查服务器资源限制
- 查看服务器CPU、内存使用率,资源不足会导致Worker无法正常处理任务
- 检查PHP配置:
max_execution_time、memory_limit是否过低,导致任务中途中断 - 确认服务器防火墙/安全组是否允许Mailcoach连接邮件服务器的端口(如25/587/465)
内容的提问来源于stack exchange,提问作者Shery
相关产品推荐
相关产品推荐

