{ "campaign_id": 1, "status": "running", "total": 0, "sent": 0, "temp_failed": 0, "perm_failed": 0, "suppressed": 0, "skipped": 0, "pending": 0, "queued": 2, "processing": 0, "jobs_total": 2, "completed": false, "progress_pct": 0.0, "started_at": "2026-09-10T22:41:59.453878+00:00", "finished_at": null } === recipients monitor === { "recipients": [ { "id": 1, "seq": 1, "email": "alice@example.com", "status": "queued", "account": "sender1@example.com", "subject": "Invoice %InvoiceNumber% \u2014 payment due %DueDate%", "template": "Invoice Template", "invoice_number": "INV-UG5O-D8CZ7-AAABNS-0164", "amount": 636.81, "shipping": 29.11, "attempts": 1, "message_id": "", "thread_id": "", "sent_at": null, "last_error": "temporary error: No Google OAuth client configuration available. Import a client_secret.json in Gmail Accounts \u2192 Import Gmail Configurati" }, { "id": 2, "seq": 2, "email": "bob@example.com", "status": "queued", "account": "sender1@example.com", "subject": "Invoice %InvoiceNumber% \u2014 payment due %DueDate%", "template": "Invoice Template", "invoice_number": "INV-J4DY-5E2CR-UCA5MI-2874", "amount": 346.88, "shipping": 9.21, "attempts": 1, "message_id": "", "thread_id": "", "sent_at": null, "last_error": "temporary error: No Google OAuth client configuration available. Import a client_secret.json in Gmail Accounts \u2192 Import Gmail Configurati" } ], "total": 2, "page": 1, "page_size": 50 === worker log === .> control exchange=send(direct) key=control.# .> send exchange=send(direct) key=send.# [tasks] . app.tasks.send_tasks.send_one [2026-09-10 22:30:45,551: INFO/MainProcess] Connected to redis://localhost:6379/1 [2026-09-10 22:30:45,555: INFO/MainProcess] mingle: searching for neighbors [2026-09-10 22:30:46,563: INFO/MainProcess] mingle: all alone [2026-09-10 22:30:46,571: INFO/MainProcess] celery@172.22.92.189 ready. [2026-09-10 22:41:59,486: INFO/MainProcess] Task app.tasks.send_tasks.send_one[84b2fd83-fabf-4c32-bc83-168931e6e9c4] received [2026-09-10 22:41:59,497: INFO/MainProcess] Task app.tasks.send_tasks.send_one[bc88c280-7482-4b5e-bc1a-2ec02a672450] received [2026-09-10 22:41:59,613: WARNING/ForkPoolWorker-2] HTML validation warnings for alice@example.com: ["Unsubstituted variables remain: ['DueDate']"] [2026-09-10 22:41:59,646: INFO/MainProcess] Task app.tasks.send_tasks.send_one[bcb6258d-c572-4f25-9a92-074a6309fe51] received [2026-09-10 22:41:59,648: INFO/ForkPoolWorker-2] Task app.tasks.send_tasks.send_one[84b2fd83-fabf-4c32-bc83-168931e6e9c4] succeeded in 0.16040096799997627s: {'ok': False, 'status': 'retrying', 'reason': 'No Google OAuth client configuration available. Import a client_secret.json in Gmail Accounts → Import Gmail Configuration, or set GOOGLE_OAUTH_CLIENT_JSON_PATH.'} [2026-09-10 22:42:09,493: INFO/MainProcess] Task app.tasks.send_tasks.send_one[350938b8-0abc-473b-b4d6-d28c088d89e9] received [2026-09-10 22:42:09,494: INFO/ForkPoolWorker-2] Task app.tasks.send_tasks.send_one[bc88c280-7482-4b5e-bc1a-2ec02a672450] succeeded in 0.010787428000185173s: {'ok': False, 'status': 'rescheduled', 'reason': 'rate window'} [2026-09-10 22:42:10,501: WARNING/ForkPoolWorker-2] HTML validation warnings for bob@example.com: ["Unsubstituted variables remain: ['DueDate']"] [2026-09-10 22:42:10,519: INFO/MainProcess] Task app.tasks.send_tasks.send_one[116afa25-7712-4664-97d3-5670605a903e] received [2026-09-10 22:42:10,520: INFO/ForkPoolWorker-2] Task app.tasks.send_tasks.send_one[350938b8-0abc-473b-b4d6-d28c088d89e9] succeeded in 0.026009746999989147s: {'ok': False, 'status': 'retrying', 'reason': 'No Google OAuth client configuration available. Import a client_secret.json in Gmail Accounts → Import Gmail Configuration, or set GOOGLE_OAUTH_CLIENT_JSON_PATH.'}