Как программно использовать встроенные шаблоны электронной почты liferay?

В моем приложении liferay я добавляю пользователей приложения, используя Expando программно, а не используя регистрацию пользователей liferay по умолчанию. Теперь я хочу отправить учетные данные пользователю на его адрес электронной почты, используя стандартные шаблоны liferay, доступные в Панели управления - Настройка портала - Шаблоны электронной почты.

Как я могу активировать электронную почту, используя этот встроенный шаблон liferay? Любая подсказка приветствуется.


person Lalit Jawale    schedule 27.07.2016    source источник


Ответы (1)


Liferay использует файлы шаблонов (.tmpl) для управления шаблонами электронной почты. Согласно Liferay Source, для создания пользователя данный фрагмент используется для отправки почты пользователям.

String body = PrefsPropsUtil.getContent(
            user.getCompanyId(), PropsKeys.ADMIN_EMAIL_USER_ADDED_BODY);

SubscriptionSender subscriptionSender = new SubscriptionSender();

    subscriptionSender.setBody(body);
    subscriptionSender.setCompanyId(user.getCompanyId());
    subscriptionSender.setContextAttributes(
        "[$USER_ID$]", user.getUserId(), "[$USER_PASSWORD$]", password,
        "[$USER_SCREENNAME$]", user.getScreenName());
    subscriptionSender.setFrom(fromAddress, fromName);
    subscriptionSender.setHtmlFormat(true);
    subscriptionSender.setMailId(
        "user", user.getUserId(), System.currentTimeMillis(),
        PwdGenerator.getPassword());
    subscriptionSender.setServiceContext(serviceContext);
    subscriptionSender.setSubject(subject);
    subscriptionSender.setUserId(user.getUserId());

    subscriptionSender.addRuntimeSubscribers(toAddress, toName);

    subscriptionSender.flushNotificationsAsync();

Это часть класса реализации службы UserLocalServiceImpl. Здесь «PropsKeys.ADMIN_EMAIL_USER_ADDED_BODY» — это путь к шаблону для содержимого тела (по умолчанию используется liferay). Вы можете заполнить свои пользовательские данные в предоставленном шаблоне.

Изменить: после того, как вы выполните свою пользовательскую логику, вы можете напрямую позвонить

UserLocalServiceUtil.sendPassword(
            long companyId, String emailAddress, String fromName,
            String fromAddress, String subject, String body,
            ServiceContext serviceContext)

непосредственно из пользовательского класса, который позаботится об использовании шаблона Liferay, а также об управлении паролями.

person Shivam Aggarwal    schedule 28.07.2016
comment
Спасибо за ваш ответ, но мне также нужно отправить пароль пользователя, откуда я могу получить пароль пользователя? - person Lalit Jawale; 02.08.2016
comment
Попробуйте использовать для этого user.getPassword() - person Shivam Aggarwal; 03.08.2016
comment
user.getPassword() дает мне зашифрованный пароль, который невозможно расшифровать. Так что это не полезно. - person Lalit Jawale; 04.08.2016
comment
@LalitJawale Обновил мой ответ! - person Shivam Aggarwal; 05.08.2016
comment
Спасибо, что уделили время, но по-прежнему используется шаблон сброса пароля liferay, в котором нет параметра пароля. - person Lalit Jawale; 05.08.2016
comment
Если вы можете получить пароль, вы можете просто заменить ключ тела на ADMIN_EMAIL_USER_ADDED_BODY и обязательно заполнить правильные параметры в соответствии с шаблоном. - person Shivam Aggarwal; 05.08.2016
comment
Я получаю пароль, но он в зашифрованном формате. Подскажите, пожалуйста, как его расшифровать, чтобы отправить в качестве параметра. - person Lalit Jawale; 07.08.2016
comment
@LalitJawale в соответствии с отредактированным ответом, не могли бы вы попробовать напрямую использовать метод sendPassword для электронной почты (содержащий пароль) после того, как вы выполните свою пользовательскую логику, чтобы добавить поле расширения - person Shivam Aggarwal; 08.08.2016
comment
Извините, но мое намерение в этом сценарии - отправить учетные данные пользователя пользователю в любое время, а не сразу после добавления пользователя. Поэтому позже у меня не будет пароля этого пользователя, чтобы отправить его по электронной почте. Самым большим препятствием является наличие пароля пользователя в ОБЫЧНОМ ТЕКСТЕ, чтобы отправить его пользователю. - person Lalit Jawale; 08.08.2016
comment
Насколько мне известно, из соображений безопасности, чтобы даже разработчики не имели доступа к паролю пользователя, пароль пользователя недоступен в виде обычного текста. Даже мы столкнулись с этим препятствием некоторое время назад, но я думаю, что с ясное экономическое обоснование, отправка пароля не должна быть опцией. Скорее, пользователь должен использовать режим сброса/забытого пароля. - person Shivam Aggarwal; 09.08.2016