This is why I suggested a separate notification engine. It would essentially make all notifications (including email) asynchronous. Why embed all of that email logic all over the application? Keep the same signatures but put the actual transmission logic elsewhere in one place. Now there’s one place for error handling and failure reporting, even retransmission logic, etc. Also, having all that routing logic in one place would make life a lot easier too.
End of old-man rant…