По сути, вам необходимо переопределить метод save
, проверить, было ли изменено поле state
, установить started
, если необходимо, и затем позволить базовому классу модели завершить сохранение в базе данных.
Хитрая часть выяснить, если поле было изменено. Ознакомьтесь с миксинами и другими решениями в этом вопросе, чтобы помочь вам с этим:
«Лучшее» является субъективным, тем более что вы не указали никаких конкретных функции, которые вы, возможно, ищете.
С учетом сказанного, вот пара, с которой вы начнете:
javaee.github содержит исчерпывающий список с множеством других:
JavaMail является стандартом, но это всего лишь клиент, поэтому вам потребуется отдельная служба электронной почты для отправки почты. Asprin - хорошая реализация сервера.
EDIT: Asprin - это сервер электронной почты только для отправки. Вы не можете использовать его как полноценный сервер POP или IMAP. Он просто отправляет электронную почту без каких-либо дополнительных зависимостей от третьей стороны (например, от почтовой службы ISP) (кроме подключения к Интернету). В отличие от JavaMail, который требует, чтобы у вас был доступный SMTP-сервер для отправки электронной почты за вас (например, от вашего интернет-провайдера). Если вам нужен полноценный почтовый сервер, который может предоставлять электронную почту pop и imap, взгляните на Джеймс .
Здесь список опций почты Java, хотя большинство, подобно JavaMail, являются клиентами, а не автономными решениями.