В этой статье мы обсудим, как использовать Rythm в качестве движка шаблонов для отправки уведомлений по электронной почте.
Электронная почта, как форма уведомления, которая будет уведомлять нас о таких событиях, как регистрация, новостная рассылка, ежедневные новости и обновления в социальных сетях, а также о состоянии системы.
Использование доступного приложения с открытым исходным кодом, такого как Rythm, позволит нам легко отправить электронное письмо с HTML-шаблоном.
Давайте сначала создадим содержимое электронной почты, используя html, содержащий информацию о ученике внутри таблицы.
Ниже приведен фрагмент нашего HTML-шаблона (content.html).
@args(){ com.sample.Student student String message } <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title></title> <style> table { font-family: Segoe UI, Verdana, Arial, helvetica, sans-serif; font-size: 14px; background-color: #FFFFFF; } th { margin-left: 5px; margin-right: 5px; text-align: left; } td { margin-left: 5px; margin-right: 5px; background-color: #E5E5E5; } </style> </head> <body> <table style="width:100%"> <tr> <th colspan="2" style="color: white" bgcolor="#FF8C00">Student Information</th> </tr> <tr> <td>Student ID</td> <td>@student.getId()</td> </tr> <tr> <td>Name</td> <td>@student.getName()</td> </tr> <tr> <td>Age</td> <td>@student.getAge</td> </tr> <tr> <td>Course</td> <td>@student.getCourse()</td> </tr> </table> <br> <p style="font-style: italic">@note</p> </body> </html>
Теперь давайте углубимся в некоторые важные детали.
@args(){ com.sample.Student student String note }
Приведенный выше фрагмент кода говорит, что наш шаблон будет принимать два аргумента в качестве объекта Java (Student и String). Для вас важно включить полное имя объекта, чтобы ритм-движок обнаружил ваш Java-объект. (т.е. com.sample. Студент студент ).
[Доступ к значениям из объекта Student]
Я создал HTML-таблицу для отображения информации об ученике.
<table style="width:100%"> <tr> <th colspan="2" style="color: white" bgcolor="#FF8C00">Student Information</th> </tr> <tr> <td>Student ID</td> <td>@student.getId()</td> </tr> <tr> <td>Name</td> <td>@student.getName()</td> </tr> <tr> <td>Age</td> <td>@student.getAge()</td> </tr> <tr> <td>Course</td> <td>@student.getCourse()</td> </tr> </table>
Мы можем получить доступ к значениям из объекта student с помощью созданных нами методов получения, перед которыми стоит знак @ ( т.е. @ student.getId () ).
<p style="font-style: italic">@note</p>
Приведенный выше фрагмент кода показывает, как отобразить значение переменной примечания, которому предшествует знак @, который будет отображаться в нижней части содержимого электронной почты.
Теперь перейдем к кодированию.
Ниже находится студенческий класс.
package com.sample; public class Student { private int id; private String name; private int age; private String course; public Student(int id, String name, int age, String course) { this.id = id; this.name = name; this.age = age; this.course = course; } public int getId() { return id; } public String getName() { return name; } public int getAge() { return age; } public String getCourse() { return course; } }
А вот и основной класс
package com.sample; import org.rythmengine.RythmEngine; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.File; import java.util.Properties; /** * Created by FaustineP™ on 1/5/2015. */ public class Main { public static void main(String args[]) { Session session = setGOOGLESMTPConfig(); try { MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("[email protected]")); message.addRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]")); String subject = String.format("[%s]", "Rythm Engine Template Email"); message.setSubject(subject); RythmEngine rythmEngine = new RythmEngine(); Student student = new Student(2061435412, "Student Name", 25, "BS Computer Science"); String note = "* This is a system generated email do not reply"; File template = new File(String.valueOf(Main.class.getClassLoader().getResource("content.html").getFile())); String bodyContent = rythmEngine.render(template, student, note); message.setContent(bodyContent, "text/html; charset=utf-8"); javax.mail.Transport.send(message); System.out.println("[Message sent!]"); } catch (MessagingException e) { System.out.println(e); } } private static Session setGOOGLESMTPConfig() { final Properties properties = System.getProperties(); properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.socketFactory.port", String.valueOf("465")); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.socketFactory.fallback", "false"); return Session.getDefaultInstance(properties, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("USERNAME", "PASSWORD"); } }); } }
Давайте обсудим некоторые строки выше.
/** * Instantiate RythmEngine object */ RythmEngine rythmEngine = new RythmEngine(); /** * Instantiate Student object and assign values to its corresponding variables */ Student student = new Student(2012, "Student Name", 25, "BS Computer Science"); /** * String object as a note that will be shown at the bottom part of email */ String note = "* This is a system generated email do not reply"; /** * The location of HTML template file we've created (content.html) */ File template = new File(String.valueOf(Main.class.getClassLoader().getResource("content.html").getFile())); /** * We can now render our object to the HTML content of our email */ String bodyContent = rythmEngine.render(template, student, note);
and below is the pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sample</groupId> <artifactId>rythm-email</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.rythmengine</groupId> <artifactId>rythm-engine</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.codemonkey.simplejavamail</groupId> <artifactId>simple-java-mail</artifactId> <version>2.1</version> </dependency> </dependencies> </project>
We’ve now successfully created our email notifications using rythm.