ThymeLeaf és FreeMarker e-mail sablonok használata tavasszal

1. Áttekintés

Korábbi cikkünkben láttuk, hogyan használhatjuk a Spring-et szöveges e-mailek írására és küldésére.

De az is lehetséges a Spring sablonmotorokkal gyönyörű HTML dinamikus tartalmú e-maileket írhat.

Ebben az oktatóanyagban megtanuljuk, hogyan kell csinálni a leghíresebb közülük: Thymeleaf és FreeMarker.

2. Tavaszi HTML-levelek

Kezdjük a tavaszi e-mail oktatóanyaggal.

Először hozzáadunk egy metódust a EmailServiceImpl osztály HTML-törzsű e-mailek küldéséhez:

private void sendHtmlMessage (String to, String subject, String htmlBody) dobja a MessagingException {MimeMessage message = emailSender.createMimeMessage (); MimeMessageHelper helper = új MimeMessageHelper (üzenet, igaz, "UTF-8"); helper.setTo (to); helper.setSubject (tárgy); helper.setText (htmlBody, true); emailSender.send (üzenet); }

Használjuk MimeMessageHelper hogy feltöltse az üzenetet. Fontos része a igaz érték átadva a setText metódus: megadja a HTML tartalom típusát.

Most nézzük meg, hogyan lehet ezt felépíteni htmlBody Thymeleaf és FreeMarker sablonok használatával.

3. Thymeleaf konfiguráció

Kezdjük a konfigurációval. Ezt el tudjuk különíteni egy úgynevezett osztályban EmailConfiguration.

Először kellene adjon meg egy sablonmegoldót a sablonfájlok könyvtárának megkereséséhez.

3.1. Sablonok Classpath erőforrásokként

A sablonfájlok a JAR fájlba szállíthatók, amely a sablonok és a bemeneti adatok közötti kohézió fenntartásának legegyszerűbb módja.

A sablonok megkereséséhez a JAR-ból a ClassLoaderTemplateResolver. Sablonjaink a main / resources / mail-templates könyvtárat, ezért beállítottuk a Előtag attribútum a forrás Könyvtár:

@Bean public ITemplateResolver thymeleafTemplateResolver () {ClassLoaderTemplateResolver templateResolver = új ClassLoaderTemplateResolver (); templateResolver.setPrefix ("mail-templates /"); templateResolver.setSuffix (". html"); templateResolver.setTemplateMode ("HTML"); templateResolver.setCharacterEncoding ("UTF-8"); return templateResolver; }

3.2. Sablonok a külső könyvtárból

Más esetekben esetleg módosítani szeretnénk a sablonokat anélkül, hogy újjá kellene építeni és telepíteni kellene. Ennek érdekében helyettesíthetjük a sablonokat a fájlrendszeren.

Hasznos lehet konfigurálni ezt az elérési utat itt: alkalmazás.tulajdonságok hogy minden egyes telepítéshez módosítani tudjuk. Ez a tulajdonság a @Érték kommentár:

@Value ("$ {spring.mail.templates.path}") privát karakterlánc mailTemplatesPath;

Ezután ezt az értéket átadjuk a FileTemplateResolver, a ClassLoaderTemplateResolver miénkben thymeleafTemplateResolver módszer:

FileTemplateResolver templateResolver = új FileTemplateResolver (); templateResolver.setPrefix (mailTemplatesPath);

3.3. Konfigurálja a Thymeleaf motort

Az utolsó lépés a Thymeleaf motor gyári módszerének létrehozása. Meg kell mondanunk a motornak, hogy melyik TemplateResolver választottuk, amelyet egy paraméteren keresztül be tudunk injektálni a babgyár módszerébe:

@Bean public SpringTemplateEngine thymeleafTemplateEngine (ITemplateResolver templateResolver) {SpringTemplateEngine templateEngine = új SpringTemplateEngine (); templateEngine.setTemplateResolver (templateResolver); templateEngine.setTemplateEngineMessageSource (emailMessageSource ()); return templateEngine; }

Itt a korábban létrehozott felbontót Spring automatikusan befecskendezi a sablonmotor gyári módszerébe.

4. FreeMarker konfiguráció

Ugyanúgy, mint Thymeleaf, a EmailConfiguration osztályban konfiguráljuk a sablonfeloldó a FreeMarker sablonokhoz (.ftl):

És ezúttal a sablonok helyét a FreeMarkerConfigurer bab.

4.1. Sablonok a Classpath-ban

Itt ugyanazok a lehetőségek állnak rendelkezésünkre, mint a Thymeleaf esetében. Konfiguráljuk a sablonokat classpath erőforrásokként:

@Bean public FreeMarkerConfigurer freemarkerClassLoaderConfig () {Configuration configuration = new Configuration (Configuration.VERSION_2_3_27); TemplateLoader templateLoader = new ClassTemplateLoader (this.getClass (), "/ mail-templates"); configuration.setTemplateLoader (templateLoader); FreeMarkerConfigurer freeMarkerConfigurer = új FreeMarkerConfigurer (); freeMarkerConfigurer.setConfiguration (konfiguráció); visszatérés freeMarkerConfigurer; }

4.2. Sablonok a fájlrendszeren

A fájlrendszer egy másik útvonaláról a sablonok konfigurálásához le kell cserélnünk a TemplateLoader példa:

TemplateLoader templateLoader = új FileTemplateLoader (új File (mailTemplatesPath));

5. Lokalizálás a Thymeleaf és a FreeMarker segítségével

A Thymeleaf segítségével történő fordítások kezelése érdekében megtehetjük adja meg a MessageSource például a motorhoz:

@Bean public ResourceBundleMessageSource emailMessageSource () {ResourceBundleMessageSource messageSource = új ResourceBundleMessageSource (); messageSource.setBasename ("mailMessages"); return messageSource; }
@Bean public SpringTemplateEngine thymeleafTemplateEngine () {... templateEngine.setTemplateEngineMessageSource (emailMessageSource ()); ...}

Ezután létrehoznánk erőforráscsomagokat minden támogatott területi beállításhoz:

src / main / resources / mailMessages_xx_YY.properties

Mint A FreeMarker a sablonok másolásával javasolja a lokalizációt, ott nem kell konfigurálnunk az üzenet forrását.

6. Thymeleaf sablonok tartalma

Ezután vessünk egy pillantást a template-thymeleaf.html fájl:

Mint látható, a Thymeleaf jelölést használtuk, ${…} változókra és #{…} lokalizált húrokhoz.

Mivel a sablonmotor megfelelően van konfigurálva, nagyon egyszerű használni: Csak létrehozunk egy Kontextus objektum, amely sablonváltozókat tartalmaz (mint a Térkép itt).

Aztán átadjuk a folyamat módszer a sablon nevével együtt:

@Autowired private SpringTemplateEngine thymeleafTemplateEngine; @Orride public void sendMessageUsingThymeleafTemplate (String to, String subject, Map templateModel) dobja a MessagingException {Context thymeleafContext = new Context (); thymeleafContext.setVariables (templateModel); Karakterlánc htmlBody = thymeleafTemplateEngine.process ("template-thymeleaf.html", thymeleafContext); sendHtmlMessage (to, subject, htmlBody); }

Most nézzük meg, hogyan lehet ugyanezt csinálni a FreeMarkerrel.

7. FreeMarker sablonok tartalma

Mint látható, a FreeMarker szintaxisa egyszerűbb, de ismét nem kezeli a lokalizált karakterláncokat. Tehát íme az angol változat:

Szia $ {recipientName}

$ {text}

Üdvözlettel,

$ {senderName} a Baeldungnál

Akkor használnunk kell a FreeMarkerConfigurer osztály, hogy megszerezzék a sablonfájlt, végül FreeMarkerTemplateUtils hogy beinjekciózzuk az adatainkat Térkép:

@Autowired privát FreeMarkerConfigurer freemarkerConfigurer; @Orride public void sendMessageUsingFreemarkerTemplate (String to, String subject, Map templateModel) IOException, TemplateException, MessagingException {Template freemarkerTemplate = freemarkerConfigurer.getConfiguration () .getTemplate ("sablon; String htmlBody = FreeMarkerTemplateUtils.processTemplateIntoString (freemarkerTemplate, templateModel); sendHtmlMessage (to, subject, htmlBody); }

A továbblépéshez meglátjuk, hogyan adhatunk hozzá logót az e-mail aláírásunkhoz.

8. Beágyazott képekkel ellátott e-mailek

Mivel nagyon általános a képek HTML-e-mailbe történő beillesztése, megtudjuk, hogyan lehet ezt megtenni egy CID-melléklet segítségével.

Az első változás a sendHtmlMessage módszer. Be kell állítanunk MimeMessageHelper mint többrészes elhaladással igaz a konstruktor második érvére:

MimeMessageHelper helper = új MimeMessageHelper (üzenet, igaz, "UTF-8");

Ezután meg kell szereznünk a képfájlt erőforrásként. Használhatjuk a @Érték kommentár ehhez:

@Value ("classpath: /mail-logo.png") Resource resourceFile;

Figyeljük meg, hogy a mail-logo.png fájl a src / main / resources Könyvtár.

Vissza a sendHtmlMessage módszer hozzá resourceFile inline mellékletként, hogy hivatkozhasson rá CID-vel:

helper.addInline ("attachment.png", resourceFile);

Végül a A képre mind a Thymeleaf, mind a FreeMarker e-mailekből hivatkozni kell CID jelöléssel:

9. Következtetés

Ebben a cikkben azt láttuk, hogyan küldhetünk Thymeleaf és FreeMarker e-maileket, beleértve a gazdag HTML tartalmat is.

Befejezésül: a munka nagy része tavaszhoz kapcsolódik; ebből kifolyólag, az egyik vagy másik használata meglehetősen hasonló egy egyszerű igényhez, például e-mail küldéshez.

Mint mindig, a példák teljes forráskódja megtalálható a GitHub oldalon.


$config[zx-auto] not found$config[zx-overlay] not found