Ok, ecco un suggerimento.
Prima di tutto, dovresti eliminare i parametri ripetuti (da, a, soggetto ecc.) e i metodi (sendInvite, sendVerificationCode etc).
Per riuscirci, puoi iniziare con la definizione di una classe EMail che contiene i parametri come attributi. Questo è un approccio abbastanza standard quando si affrontano parametri ripetitivi. Ora tutti gli inviti e le verifiche e simili sarebbero solo istanze di EMail e tutti i messaggi di posta elettronica potrebbero essere inviati utilizzando un solo metodo di invio. Così ti libererai anche dei metodi ripetitivi.
EMail potrebbe essere sottoclasse o fornire metodi di fabbrica per la creazione di tutti i tipi di messaggi. Quindi,
EMail verificationMessage = new VerificationEMail(recipient, verificationCode);
o
EMail verificationMessage = EMail.createVerificationMessage(recipient, verificationCode);
Scelgo il secondo approccio se non porta a una classe EMail eccessivamente gonfia.
Ciò che accade nei campi da e soggetto di un messaggio dovrebbe probabilmente essere deciso nel metodo che sta creando un messaggio di un certo tipo. Tutti i messaggi di verifica dovrebbero probabilmente avere un titolo simile ecc.
Dopo aver definito la struttura dei messaggi hai bisogno solo di un qualche tipo di dispatcher o di tipo per inviarli:
EMailDispatcher dispatcher = new EMailDispatcher();
dispatcher.send(someMessage);
Dispatcher potrebbe avere un solo metodo per inviare messaggi:
public void send(EMail mail);
Cercherò di evitare di avere un metodo di invio statico come il tuo EMailUtil. I metodi statici sono difficili da sostituire per i test unitari e in altro modo. Non vuoi ricevere migliaia di email effettive inviate ogni volta che vengono eseguiti test automatici.
Ora, se stai usando JavaMail-API , allora ha già una Message
di classe. Tuttavia potrebbe rivelarsi utile avere la propria classe di messaggi per definire i contenuti e i tipi di messaggi richiesti dall'applicazione e far sì che il dispatcher gestisca l'API Java più tecnica.