Статьи

Rythm Engine для уведомлений по электронной почте

В этой статье мы обсудим, как использовать  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.