bus.subscribe() is sync and returns an async iterator, not a coroutine. Awaiting it caused an immediate crash at startup; bus.next_message() does not exist either. Rewrote _run_smtp_probe_listener to use the standard pattern: sub = bus.subscribe(...) / async with sub / async for event in sub.