O que você está procurando, como você mencionou na sua pergunta, é o encadeamento de tarefas.
Dos documentos do Laravel
O encadeamento de tarefas permite especificar uma lista de tarefas enfileiradas que devem ser executadas em sequência. Se um trabalho na sequência falhar, o restante dos trabalhos não será executado. Para executar uma cadeia de tarefas enfileiradas, você pode usar o método withChain em qualquer uma de suas tarefas despacháveis:
ProcessPodcast::withChain([ new OptimizePodcast, new ReleasePodcast ])->dispatch();
Então no seu exemplo acima
$mailJobs = Subscriptions::all()
->map(function($subscription) {
return new SendMailJob($subscription);
});
Job::withChain($mailJobs)->dispatch()
Deve dar o resultado esperado!
Atualizar
Se você não quiser usar um trabalho inicial para encadear (como mostrado no exemplo de documentação acima), você poderá criar um
Job
vazio classe que tem use Dispatchable;
. Então você pode usar meu exemplo acima