null

Работа с почтой в Liferay 6

Liferay может рассылать почтовые уведомления о различных событиях. Эта функция используется как самим порталом, например, при восстановлении пользователем пароля, так и отдельными портлетами, к примеру, календарём. В статье будут рассмотрены стандартные уведомления Liferay и разработка собственных уведомлений для встраивания в свой портлет.

Настройка параметров почтового сервера

В первую очередь, чтобы какие-либо уведомления могли отправляться, необходимо сообщить порталу информацию о почтовом сервере, а именно хост и порт для входящей (протокол SMTP) и для исходящей (протокол POP или IMAP) почты. Эти параметры передаются JavaMail - библиотеке на которой строится работа с почтой в Java. В ранних версиях Liferay параметры конфигурации JavaMail задавались в файле portal-ext.properties, но начиная с Liferay 6 для этого используется графический интерфейс. Пейрейдите в Control Panel ➝ Server Administration ➝ Mail (Панель управления ➝ Администрирование сервера ➝ Почта).


Рис.1 Интерфейс настройки параметров почтового сервера в Liferay

Последнее поле формы оставлено для дополнительных параметров, которые могут расширять или переопределять указанные выше. В этом поле значения задаются аналогично JavaMail Properties, но с префиксом mail.session. Они будут считаны, только если в portal-ext.properties установлено свойство <>mail.session.jndi.name=mail/MailSession. В качестве примера ниже приведена конфигурация для Gmail, как одна из наиболее востребованных.

 

mail.session.mail.store.protoc­ol=imap
mail.session.mail.transport.protocol=smtp

mail.session.mail.pop3.host=pop.gmail.com
mail.session.mail.pop3.password=
ma­il.session.mail.pop3.port=110
mail.session.mail.pop3.user=

mail.session.mail.imap.­host=imap.gmail.com
mail.session.mail.imap.port=993

mail.session.mail.smtp.host=smtp.gmail.com
mail.session.mail.smtp.password=
mail.session.mail.smtp.user=
mail.session.mail.smtp.port=465
mail.session.mail.smtp.auth=true
mail.session.mail.smtp.starttls.enable=true
mail.session.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

 

Однако, следует учитывать, что использование внешнего почтового сервера не всегда возможно, и осложняется наличием proxy. Организации, как правило, вводят параметры своего внутреннего почтового сервера.

Параметры популярных почтовых серверов
Параметр GMail Yandex Rambler MailRu
Защита SSL/TLS SSL SSL/STARTTLS SSL/TLS
SMTP хост smtp.gmail.com smtp.yandex.ru smtp.rambler.ru smtp.mail.ru
SMTP порт 465/587 465 465 465
POP3 хост pop.gmail.com pop.yandex.ru pop.rambler.ru pop.mail.ru
POP3 порт 995/110 995 995 995
IMAP хост imap.gmail.com imap.yandex.ru imap.rambler.ru imap.mail.ru
IMAP порт 993 993 993/143 993/143
Документация Источник Источник Источник Источник

 

Настройка стандартных email уведомлений

Стандартные уведомления можно настроить в Control Panel ➝ Portal Setting ➝ Email Notification (Панель управления ➝ (Портал) Настройки ➝ Email уведомления). Для них доступно изменение шаблона, но не локализация. Поддержка локализации emai уведомлений добавлена в Liferay 7.

Рис.2 Интерфейс настройки стандартных уведомлений Liferay

Рассылка собственных уведомлений

Если вы решили добавить к своему портлету оповещения через email, вместо стандартного JavaMail лучше воспользоваться встроенным Liferay классом MailServiceUtil.

import com.liferay.mail.service.MailServiceUtil;
import com.liferay.portal.kernel.mail.MailMessage;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.internet.InternetAddress;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;

public class EmailPortlet extends MVCPortlet {
    static final Logger logger = Logger.getLogger(EmailPortlet.class.getName());

    public void sendEmail(ActionRequest request, ActionResponse response) {
        String sender = request.getParameter("sender");
        String receiver = request.getParameter("recipient");
        String subject = request.getParameter("subject");
        String message = request.getParameter("message");
        sendMailMessage(sender, receiver, subject, message, LocaleUtil.getDefault());
    }

    public void sendMailMessage(String sender, String receiver, String subject, String message, Locale locale) {        
        try {
            MailMessage mailMessage = new MailMessage();
            mailMessage.setBody(message);
            mailMessage.setSubject(subject);
            mailMessage.setFrom(new InternetAddress(sender));
            mailMessage.setTo(new InternetAddress(receiver));
            MailServiceUtil.sendEmail(mailMessage);
        } catch (Exception ex) {
            logger.log(Level.SEVERE, "Can not send email: {0}", ex.getMessage());
        }
    }
}

 

MailServiceUtil содержит только метод отправки сообщения, получить почту можно только используя JavaMail, но такая задача встает редко, например, при написании почтового клиента. Но в таком случае не стоит спешить писать что-то своё, у Liferay есть бесплатный почтовый клиент MailPortlet доступный на Marketplace.

Назад