Създаване на шаблони за електронна поща с помощта на XML

Ето списък на основните причини за използването на свойствата на файлове не е най-добрият начин за съхранение на низове, които правят модела на електронна поща:

Имоти файлове се показват в една много проста структура на данни - двойка ключове и техните стойности. Той не е подходящ, ако стойностите, които искат да се свързва с един и същ ключ. Например, имейл съобщение, може да има четири души в полето До: и три в полето Копие. Това не може да се реализира само чрез използване на свойствата на файлове.

Файловете с имоти са много строга формат на съдържанието им. Всеки ключ и стойност трябва да е на една и съща линия. По този начин, на линиите може да предизвика много ненужни проблеми с редактирането на този файл. Например, това ще бъде много трудно да се сложи цялото тяло в имоти един имейл съобщения (ключ = стойност чифт). А ако искате да се включат трансфери към друга линия в рамките на стойността на този имот, вие ще трябва да ги замени със специален характер \ н.

Налице е алтернативен подход за създаване на шаблон за имейл. Тя се намира в използването на XML, и това е подходът, който ще разгледа в тази статия. XML предоставя възможността да проектирате шаблони за имейл с много гъвкава структура, и, в допълнение, той няма такива ограничения по отношение на формата, които се провеждат във файловете на имоти. Ето защо, с негова помощ, ние можем много лесно да спести достатъчно голям низ. Единственото предимство на свойствата на файла, който с тях малко по-лесно, отколкото да се работи с XML-документи. В случай на имоти файлове са много по-лесно да качите файл и след това да получат достъп до имотите, вече не се позовава на файла. От друга страна, в случай на XML-файл отнема много повече време, за да изтеглите и преработка. Той също така ще трябва да използвате един от многото библиотеки за работа с XML-файлове, някои от които са с Java.

Шаблони за имейл

String newString = MessageFormat.format (

bundle.getString ( "file.not.found грешка."), аргументи);


В резултат на това newString променлива ще съдържа низ "Грешка, невъзможно да се намери some_file.txt файл." В. Подобна функционалност ние въведохме в нашата система. От класа на MessageFormat може да работи с всички струни, можете просто да поставите същите идентификатори заместители на елементи на предмет и тялото на електронното съобщение, в XML шаблона.

Понякога може да е необходимо да въведете лична информация във вашите шаблони, преди изпращане на имейли. Например, може да се наложи да се включи името на получателя в тялото на съобщението или, може би, дори и подробности за реда ги произвеждат.

Нашата система е лесно да се справят с такъв проблем чрез преработка на обект и тяло елементи на съдържанието чрез MessageFormat. Уловката е, че този клас отнема само един набор от аргументи, които ще бъдат използвани за преработка, както областта предмет и тялото на съобщението. По този начин, в съдържанието на предмета на елемента може да се получи документи за самоличност, както и, както е в съдържанието на тялото на елемент - и. Избрахме този подход, тъй като някои от тях са много често същите аргументи се използват и в двете области, тялото и са предмет, а също така опростява списъка с параметри, подавани към EmailSender.

обработка на шаблон

По-долу е метод, който чете данните от XML-файл и ги копира в EmailTemplate обект:

публично статично EmailTemplate getEmail Template (InputStream aStream)

Биореактор биореактора = нов Биореактор ();

digester.addBeanPropertySetter ( "имейл / субект", "субект");

digester.addBeanPropertySetter ( "имейл / тяло", "тяло");

digester.addBeanPropertySetter ( "електронна поща / до", "от");

digester.addCallMethod ( "електронна поща / до", "addTo", 0);

digester.addCallMethod ( "имейл / ст", "addCc", 0);

digester.addCallMethod ( "имейл / Ск", "addBcc", 0);

се върне (EmailTemplate) биореактор. разбор (aStream);

улова (IOException д)

logger.error ( "грешка", д);

улова (SAXException д)

logger.error ( "грешка", д);


Сега нека да разгледаме всеки ред от този пример. Работа с Commons Биореактора е да се създаде набор от правила, които по-късно ще бъдат приложени към преписката да бъде обработена. Преди да се пристъпи към указанията на тези правила, ние ще предварително да се зададе флага за проверка на валидността на XML-документ е фалшив, защото той не създава и не е свързана с нашата XML файл не DTD-файл, за да се провери валидността на нашата структура на шаблон. За да започнете да го обработи, създайте Биореактора обект на класа и след това се обадете методи да се определят правилата за картографиране на данни. На първо място, ние наричаме метод addObjectCreate (), която определя създаването правило EmailTemplate обект, веднага след като се срещнем на елемент имейла. имейл елемент е основния елемент на нашия шаблон, така че всеки шаблонен файл ще се появи, когато в един EmailTemplate клас.

По отношение на елементите, които могат да се появят повече от един път в шаблона за електронна поща, на обаждането методи не са подходящи за тези имоти. Вместо това, ние се използва метод addCallMethod (), която се съдържанието на елемента и е специален метод. Ние използвахме версия на този метод, който се три аргумента. Това е шаблон за привеждане в съответствие, метода, който трябва да се плати и на броя на аргументите, които ще бъдат предадени на този метод. И в трите случая са посочили 0 като трети аргумент, защото този метод ще бъде дадено само на съдържанието на намерен елемент. В този клас писахме EmailTemplate три основни метода: addTo (), addCc () и addBcc (), която добавя в списъка на получателите на съобщението от файла на шаблона в клас събиране EmailTemplate.

След като се установят правила за всичките шест типа дъщерни елементи на електронна поща XML-шаблон, ние можем да преминете направо към разглеждане на нашия файл. За тази цел на InputStream, файлът, свързани с XML-документ, който се предава като метод getEmailTemplate () аргумент. () Метод може да се прави разбор като аргумент обект файлове, InputSource на SAX, InputStream, Читалня или URI низ, който идентифицира мястото на мястото на файла, за да бъде обработена. Избрахме версията на (метод синтактична), който е на InputStream обект като аргумент.

() Метод синтактична може да се хвърли изключение IOException или SAXException. Ако има някой от тези изключения, ние го хване, влезте с помощта Log4j и връща нула. Ако няма да има никакви изключения, тогава getEmailTemplate () метод връща нова инстанция на EmailTemplate, които ще бъдат генерирани с помощта на класа Биореактора.

Останалата част от EmailTemplate клас

EmailSender


Сега, ние имаме успешно демонтирани файла на шаблона и се пригответе EmailTemplate обект клас, следващата стъпка ще започне изпращането на имейла. Клас EmailSender включва една статична претоварен метод - sendEmail (). Ето подписа си:

публично статично невалидни sendEmail (


Аргументите на този метод вероятно няма да се нуждаят от много обяснения.

Вторият аргумент - самата EmailTemplate обект е.

И третият - списък на аргументи, които ще бъдат прехвърлени MessageFormat клас, когато той ще се справи с сюжетната линия и тялото съобщение. За тази цел има специална част от код, за да се създаде масив от информация, която се използва за персонализиране на шаблона за електронна поща. Налице е също така обяви и някои други методи, които се използват, за да направи по-лесно да се обадите на този метод. Така че можете да го наречем, без да уточнява получателите или без никакви аргументи.

Тялото на метод sendEmail (), най-вече се състои от разговори JavaMail методи на API за конфигуриране на настройките и да изпратите съобщението. Първо, ние проверяваме дали нула обект EmailTemplate. Ако равен, а след това не се прави нищо. В противен случай, при първия етап на настройката на параметрите се създаде обект Имоти (подобрена Hashtable) с SMTP-сървър съоръжения.

Както бе споменато по-рано, ние използваме MessageFormat да кандидатстват всички аргументи преминали на метода на органа по темата и текста.

След това трябва само да копирате получи предмет и тялото на съобщението в обект на съобщението. Сега всичко, което е останало да се направи - обадете се на метод Transport.send () и да го давате клас обект MimeMessage.

Сега ние се научите как да използвате системата. Ние считаме, че при работата на сървлета, въпреки че трябва да работят във всяка друга нормална програма. Следният код илюстрира работата със системата ни:

// Грабен имейл шаблон