bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Gestione dei template delle mail con Liferay 7.1

Alzi la mano chi ha dovuto inviare una mail con Liferay!

Lo sappiamo, non è poi un'operazione così difficile, tuttavia ci sono sempre alcuni requisiti comuni ad ogni mail:

  • preparare un template HTML
  • salvare il template HTML da qualche parte
  • sostituire tutti i placeholder
  • inviare la mail

In questo post voglio fare un pò di chiarezza sui vari punti, così al prossimo invio di una mail sapere dove andare a leggere!

Come prima cosa aggiungiamo nel file build.gradle tutte le dipendenze che servono:

compileOnly group: "com.liferay", name: "com.liferay.petra.content"
compileOnly group: "com.liferay", name: "com.liferay.petra.mail"
compileOnly group: "com.liferay", name: "com.liferay.petra.string"

Preparare un template HTML e salvarlo nel bundle

Il template HTML alla fine non è altro che una stringa ma se pensiamo al testo di una mail, potrebbe essere molto lungo e quindi scomodo da salvare in una costante; sarebbe molto meglio poterlo salvare in un file di testo.

Pertanto creiamo una sottocartella templates (chiamatela pure come volete) all'interno di src/main/resources  ed inseritegli un file template_body.tmpl (anche qui il nome è a vostra scelta) contenente il testo della mail fatto, ad esempio, nel modo seguente:

Gentile [$FIRST_NAME$] [$LAST_NAME$],
grazie per esserti registrato al sito.

Tutte le notifiche verranno spedite all'indirizzo <strong>[$EMAIL_ADDRESS$]</strong>.

Lo staff

Il testo è molto semplice ma serve solamente a mostrare come devono essere inseriti i placeholder all'interno del testo secondo lo standard Liferay: [$ seguito dal nome del placeholder (tutto maiuscolo senza spazi), il tutto chiuso da $].

Con il template HTML abbiamo finito; viene salvato all'interno del bundle OSGi e quindi distribuito insieme al JAR.

Sostituire tutti i placeholder

La prima operazione da fare è recuperare il template HTML; per farlo bisogna usare una classe di portale passandogli il percorso del template HTML ed il classloader di una classe situata nel medesimo bundle del template stesso.

Una volta recuperato il template si istanzia un oggetto MailTemplate che rappresenta appunto il template.

String content = ContentUtil.get(this.getClassLoader(), "templates/template_body.tmpl");

MailTemplate mailTemplate = MailTemplateFactoryUtil.createMailTemplate(content, true);

A questo punto è necessario configurare il contesto del template, ossia l'elenco di tutte le sostituzioni da fare sui placeholder; anche in questo caso utilizzeremo delle classi di portale.

User user = ... // recuperato da qualche parte

MailTemplateContextBuilder mailTemplateContextBuilder = MailTemplateFactoryUtil.createMailTemplateContextBuilder();

mailTemplateContextBuilder.put("[$FIRST_NAME$]", user.getFirstName());
mailTemplateContextBuilder.put("[$LAST_NAME$]", user.getLastName());
mailTemplateContextBuilder.put("[$EMAIL_ADDRESS$]", user.getEmailAddress());

MailTemplateContext mailTemplateContext = mailTemplateContextBuilder.build();

A questo punto possiamo finalmente sostituire i placeholder del testo:

String body = mailTemplate.renderAsString(Locale.ITALY, mailTemplateContext);

Il grosso del lavoro è finito, abbiamo il testo finale da poter inviare via mail ma questo è facile.

MailEngine.send(from, to, subject, body, true);

Enjoy!

Commenti
Nessun commento. Vuoi essere il primo.