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.protocol=imap
mail.session.mail.transport.protocol=smtp
mail.session.mail.pop3.host=pop.gmail.com
mail.session.mail.pop3.password=
mail.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.