Creați șabloane de e-mail folosind XML

Aici este o listă a principalelor motive pentru utilizarea de fișiere de proprietăți nu este cel mai bun mod de a stoca siruri de caractere care alcătuiesc modelul de e-mail-uri:

Fișierele proprietăți sunt afișate într-o structură de date foarte simplu - o pereche de chei și valorile lor. Nu este adecvată în cazul în care setul de valori pe care doriți să se lege la aceeași cheie. De exemplu, un mesaj de e-mail poate avea patru persoane în câmpul Către: și trei în câmpul Cc. Nu poate fi realizată prin simpla utilizare proprietăți de fișier.

Fișierele proprietăți sunt un format foarte strict al conținutului lor. Fiecare cheie și valoare ar trebui să fie pe aceeași linie. Astfel, liniile pot provoca o mulțime de probleme inutile cu editarea acestui fișier. De exemplu, va fi foarte dificil de a pune întregul corp în proprietățile mesajului de e-mail (key = valoare pereche). Și dacă doriți să includă transferurile către o altă linie în valoarea acestei proprietăți, va trebui să le înlocuiască cu un caracter special \ n.

Există o abordare alternativă la crearea unui șablon de e-mail. Acesta se află în utilizarea XML, iar acest lucru este abordarea vom lua în considerare în acest articol. XML oferă posibilitatea de a proiecta șabloane de e-mail cu o structură foarte flexibilă, și, în plus, el nu are astfel de restricții cu privire la formatul, care au loc în fișierele de proprietăți. Prin urmare, cu ajutorul lui, putem salva foarte ușor șir de caractere suficient de mare. Singurul avantaj al proprietăților fișierului care cu ei un pic mai ușor de a lucra cu mult XML-documente. În cazul proprietăților fișierelor sunt mult mai ușor pentru a încărca un fișier și apoi accesați proprietățile, nu se mai referă la dosar. Pe de altă parte, în cazul fișier XML durează mult mai mult timp pentru a descărca și de prelucrare. Acesta va trebui, de asemenea, de a utiliza unul dintre multele biblioteci pentru lucrul cu XML-fișiere, dintre care unele vin cu Java.

Template-uri de e-mail

String newstring = MessageFormat.format (

bundle.getString ( "eroare file.not.found."), argumente);


Ca urmare, newstring variabilă va conține șirul „Eroare, imposibil de a găsi fișierul some_file.txt.“. O funcționalitate similară am introdus în sistemul nostru. Deoarece clasa MessageFormat poate lucra cu orice siruri de caractere, aveți posibilitatea să inserați pur și simplu aceiași identificatori de substituție la elemente de subiect și în corpul mesajului electronic, șablonul XML.

Uneori poate fi necesar pentru a introduce informații personale în șabloanele dvs. înainte de a trimite email-uri. De exemplu, poate fi necesar să includă numele destinatarului în corpul mesajului sau, poate, chiar și detalii cu privire la ordinea în care le produce.

Sistemul nostru este ușor de a face față cu o astfel de problemă, prin procesarea elementelor de conținut subiect și în corpul prin intermediul MessageFormat. Captura este că această clasă are doar o serie de argumente care vor fi utilizate pentru prelucrarea ca câmpul subiectului și corpul mesajului. Astfel, în conținutul subiect al elementului poate să apară ID-uri, și, la fel ca în conținutul corpului elementului - și. Am ales această abordare, deoarece unele sunt de foarte multe ori aceleași argumente sunt utilizate în ambele domenii, corpul și sunt supuse, și simplifică, de asemenea, lista de parametri a trecut la EmailSender.

prelucrare șablon

Mai jos este o metodă care citește datele din fișier XML și să le copiile în obiect EmailTemplate:

public static EmailTemplate getEmail Template (InputStream aStream)

Digestor digestor = new digestor ();

digester.addBeanPropertySetter ( "e-mail / subiect", "subiect");

digester.addBeanPropertySetter ( "e-mail / corp", "corp");

digester.addBeanPropertySetter ( "e-mail / de la", "de la");

digester.addCallMethod ( "e-mail / a", "Adăugațipentru", 0);

digester.addCallMethod ( "e-mail / cc", "addCc", 0);

digester.addCallMethod ( "e-mail / Bcc", "addBcc", 0);

întoarce (EmailTemplate) digestor. analiza (aStream);

catch (IOException e)

logger.error ( "Eroare:", e);

captura (SAXException e)

logger.error ( "Eroare:", e);


Acum, să ne uităm la fiecare linie a acestui exemplu. Lucrul cu Commons Digestor este de a crea un set de reguli, care ulterior vor fi aplicate la dosar care urmează să fie procesat. Înainte de a trece la instrucțiunile acestor reguli, vom pre-instalat indicatorul de control privind validitatea XML documentul este fals, deoarece nu creează și nu este legată de nostru fișier XML nu DTD-fișier pentru a verifica validitatea structurii noastre șablon. Pentru a începe procesarea fișierului, a crea un obiect Digestor al clasei și apoi metode de apel pentru a seta regulile de mapare a datelor. În primul rând, noi numim metoda addObjectCreate (), care stabilește obiectul EmailTemplate crearea de regulă, de îndată ce ne întâlnim de e-mail elementul. elementul de e-mail este elementul rădăcină al șablonului nostru, astfel încât fiecare fișier șablon va fi afișat într-o singură instanță de clasă EmailTemplate.

În ceea ce privește elementele care pot apărea mai mult decât o dată în șablonul de e-mail, apelul set-metode nu sunt potrivite pentru aceste proprietăți. În schimb, am folosit addCallMethod () metoda care ia conținutul elementului și este o metodă specială. Am folosit o versiune a acestei metode, care are trei argumente. Acesta este modelul de conformitate, metoda care ar trebui să fie numit, iar numărul de argumente care vor fi transmise la această metodă. În toate cele trei cazuri am indicat 0 ca al treilea argument, deoarece această metodă va fi dat doar conținutul elementului găsit. In clasa am scris EmailTemplate trei metode: Adăugațipentru (), addCc () și addBcc (), care se adaugă lista destinatarilor mesajului din fișierul șablon în clasa colecție EmailTemplate.

Odată ce normele stabilite pentru toate cele șase tipuri de elemente copil ale e-mail XML-șablon, putem trece direct la analiza dosarului nostru. În acest scop, un InputStream, fișierul asociat cu XML documentul pe care este trecut ca getEmailTemplate metoda () argument. parse) Metoda (poate lua ca argument un fișier obiect, InputSource SAX, InputStream, Reader sau un șir URI care identifică locația locul fișierului care urmează să fie procesat. Am ales varianta metodei parse (), care ia obiectul InputStream ca argument.

parse) metoda (poate arunca o excepție IOException sau SAXException. Dacă există oricare dintre aceste excepții, o prindem, log folosind log4j și returnează null. În cazul în care nu vor exista excepții, atunci getEmailTemplate () returneaza o nouă instanță a EmailTemplate, care va fi generat utilizând clasa digestor.

Restul EmailTemplate clasa

EmailSender


Acum, că am demontat cu succes fișierul șablon și pregătiți clasa obiect EmailTemplate, pasul următor va începe trimiterea de e-mail. Clasa EmailSender include o metodă statică supraîncărcat - sendEmail (). Iată semnătura lui:

public static void sendEmail (


Argumentele acestei metode, probabil, nu va fi nevoie de prea multe explicații.

Al doilea argument - este ea însăși obiectul EmailTemplate.

Iar al treilea - o listă de argumente care vor fi transmise clasa MessageFormat, atunci când el se va ocupa de linia de subiect și corpul mesajului. În acest scop, există o piesă specială de cod pentru a crea o serie de informații care este utilizat pentru a personaliza șablonul de e-mail. Există, de asemenea, a anunțat o serie de alte metode care sunt folosite pentru a face mai ușor pentru a apela la această metodă. Astfel încât să puteți apela fără a specifica destinatarii sau fără nici un argument.

Corpul Metoda sendEmail (), constă în principal din apeluri JavaMail metode API pentru a configura setările și a trimite mesajul. În primul rând, vom verifica pentru a vedea dacă obiectul nul EmailTemplate. Dacă egal, atunci nu fac nimic. În caz contrar, primul parametru pas de stabilire a crea proprietăți obiect Properties (Hashtable îmbunătățită), cu facilități SMTP-server.

Așa cum am menționat mai devreme, folosim MessageFormat pentru a aplica toate argumentele trecut la metoda organismului de subiect și un mesaj.

După aceea, trebuie doar să copiați corpul subiectului și a primit mesajului în obiectul mesajului. Acum, tot ce rămâne de făcut - apelați metoda Transport.send () și trece-l clasa de obiect MimeMessage.

Acum vom învăța cum să folosească sistemul. Considerăm cazul lucrărilor servlet, deși ar trebui să funcționeze în orice alt program normal. Codul de mai jos ilustrează lucrul cu sistemul nostru:

// Graben de e-mail șablon