Liferay 7 MailService.sendMail из пользовательского портлета не работает только на HOST SERVER

У меня есть странная проблема с пользовательским портлетом на Liferay 7, которую нужно решить:

  1. MailService.sendMail работает с МОЕГО КОМПЬЮТЕРА с google smtp и личным аккаунтом: это означает, что код работает...
  2. На моем HOST SERVER отправка писем с final-smtp работает правильно: я пробовал как пользователя root, так и пользователя liferay с портом telnet final-smtp.
  3. На сервере Liferay на HOST SERVER отправка электронной почты работает правильно: если я забуду пароль, Liferay отправит мне электронное письмо.
  4. Но... если я попытаюсь отправить электронное письмо с помощью своего портлета из Liferay на HOST SERVER, это не сработает без каких-либо ошибок. Я использую Liferay MailService.sendMail. Я публикую код, но он работает (на МОЕМ КОМПЬЮТЕРЕ).

Я получаю услугу таким образом:

    @Reference(unbind = "-")
    protected void setMailService(MailService mailService) {
       _mailService = mailService;
    }

И код вызова находится в следующем:

    InternetAddress fromAddress = null;
    String newsletterPrefix = null;
    InternetAddress toAddress = null;

    try {
        String smtpUser = PropsUtil.get(
        "newsletter.send.mail.smtp.user");

        String smtpToUser = PropsUtil.get(
        "newsletter.send.mail.smtp.to.user");

        if (Validator.isNotNull(smtpUser)) {
            fromAddress = new InternetAddress(smtpUser);
        }
        if (Validator.isNotNull(smtpToUser)) {
            toAddress = new InternetAddress(smtpToUser);
        }
    }
    catch (Exception e) {
        _log.error(e, e);
        result = false;
    }



    MailMessage mailMessage = new MailMessage(
        fromAddress, toAddress, subject, body, true);
        mailMessage.setBCC(addressList);


    _mailService.sendEmail(mailMessage);

person Alessandra    schedule 25.04.2018    source источник


Ответы (2)


Этому может быть несколько причин, некоторые из которых даже не связаны с кодом. Я вижу, что вы используете этот код для информационного бюллетеня, который предполагает, что вы используете службу smtp, предназначенную для этого.

Возможно, ваш сервер на самом деле успешно отправляет электронное письмо, но smtp-сервер просто блокирует, отклоняет или помечает для повторной отправки позже. Кроме того, этот сервер может быть настроен так, чтобы не отправлять сообщение об ошибке или отправлять сообщение об ошибке в виде успешной доставки, но данные содержат ошибку.

Я бы начал проверять конфигурацию вашего почтового сервера и права доступа к учетным записям, а затем его журналы. Кроме того, вы можете рассмотреть возможность использования плагинов для массовой рассылки почты, таких как этот: https://www.e-systems.tech/blog/-/blogs/connecting-liferay-to-mailgun

person Victor    schedule 26.04.2018

Несколько вещей, которые вы можете сделать, чтобы отладить эту проблему:

  • Убедитесь, что вы развертываете предполагаемый код на хост-компьютере. (Глупое предложение, но часто это проблема.)
  • Try to set following package's Log level to ALL/DEBUG to see if it shows any problem in logs.
    com.liferay.mail.service
person Dharmen Panchal    schedule 25.04.2018
comment
Спасибо за ваш ответ. В логе было тихо, и это, видимо, означает, что проблем в коде нет, код и конфигурация верны, почтовый сервер не любит сообщение и не отправляет его... - person Alessandra; 26.04.2018