JMX может быть механизмом решения этой проблемы, но это не полное решение.
JMX предоставляет средства и сервисы для ваших программ, чтобы позволить клиентам получать доступ к данным мониторинга, а также разрешать клиентам совершать контрольные вызовы для приложения.
Как вы упомянули, одним из аспектов JMX является система уведомлений. Эта система предоставляет инфраструктуру, позволяющую вашей программе легко делать оповещения и уведомления доступными для клиентов, а современные JVM также предоставляют бесплатный сервер JMX, позволяющий клиенту удаленно подключаться к вашему приложению и подписываться на эти события.
Но одно дело сделать оповещение JMX, а другое - полностью действовать на него.
То, что вам нужно было бы сделать, это иметь где-нибудь JMX-клиент, «подписаться» на JMX-уведомления ваших программ, и тогда ЭТО-клиент может действовать на основании этих уведомлений, отправляя электронные письма или что-то подобное.
JMX-клиент может быть удаленным клиентом, который общается с вашим приложением через TCP, или он может быть внутренним JMX-клиентом в программе, скажем, работающим в потоке, и он может действовать на уведомления.
Итак, в основном, JMX обеспечивает водопровод и инфраструктуру для того, что вы хотите сделать, но не берет «последнюю милю» на конвертацию оповещений в электронные письма.
Как уже упоминалось @fawce, есть несколько "универсальных" JMX-клиентов различной сложности, которые могут работать с данными JMX и могут делать то, что вы хотите (я не знаком с ними, поэтому не могу сказать из первых рук), или Вы можете написать свою собственную систему для мониторинга данных JMX.