\Exception doesn't work as a catch-all because not everything extends
\Exception. For example, there was a problem where the messaging worker
didn't catch an exception here:
} catch (\Exception $e) {
$deliveryErrors[] = 'Failed sending to targets ' . $batchIndex + 1 . '-' . \count($batch) . ' with error: ' . $e->getMessage();
} finally {
As such, $deliveryErrors stayed as an empty array. In this case, the
$adapter->send() threw a TypeError which extends Error which implements
Throwable. Updating the catch to catch \Throwable ensures the error is
caught and $deliveryErrors gets updated.
Update the mails worker to only be responsible for building the final
email using the base (layout) template and the user, team, project, and
redirect variables.
It is the responsibility of the controller to perform localization and
determine whether a custom or default email template should be used.
If the default one is used, it has to be rendered using the hello,
footer, thanks, and signature variables so that it matches the custom
template. Then, it can be sent to the worker.