Это общий период проблем, не говоря уже о DDD
В общем, в любой системе, которая должна отвечать быстрым ответом (например, веб-сервер, любые длительные операции должны обрабатываться асинхронно с процессом запуска).
Это означает очередь.
Откат вашей транзакции должен удалить элемент из очереди.
Конечно, теперь вам нужны дополнительные механизмы для обработки ситуации, когда элемент наочередь не может быть обработана - то есть электронное письмо не отправлено - вы также должны учесть это в своем коде запуска - наличие последующего процесса RELY для более раннего процесса, который уже произошел, может вызвать проблемы в некоторый момент.
Короче говоря, ваш механизм очередей должен сам по себе быть транзакционным и обеспечивать повторные попытки, и вам нужно рассматривать всю цепочку событий как рабочий процесс.