来自自定义 portlet 的 Liferay 7 MailService.sendMail 不仅仅在主机服务器上工作

Liferay 7 MailService.sendMail from a custom portlet doesn't work only on HOST SERVER

我在 Liferay 7 上有一个自定义 portlet 的奇怪问题需要解决:

  1. MailService.sendMail 正在我的电脑上使用 google smtp 和个人帐户工作:这意味着代码正在工作...
  2. 在我的主机服务器上,使用 final-smtp 发送电子邮件工作正常:我尝试使用 telnet final-smtp 端口的 root 和 liferay 用户。
  3. 在 HOST SERVER 上的 Liferay 服务器上,可以正常发送电子邮件:如果我忘记密码,Liferay 会向我发送电子邮件。
  4. 但是...如果我尝试从 HOST SERVER 上的 Liferay 使用我的 portlet 发送电子邮件,它就无法正常工作。我正在使用 Liferay MailService.sendMail。我 post 代码但它有效(在我的电脑上)。

我是这样获取服务的:

    @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);

您可以做几件事来调试这个问题:

  • 确保您在主机上部署了预期的代码。 (愚蠢的建议,但很多时候这就是问题所在。)
  • 尝试将以下包的日志级别设置为ALL/DEBUG,看看它是否在日志中显示任何问题。
    com.liferay.mail.service

这背后可能有多种原因,有些甚至与代码无关。 我看到您正在将此代码用于时事通讯,这表明您正在使用专用于此目的的 smtp 服务。

可能是您的服务器实际上正在成功发送电子邮件,但 smtp 服务器只是阻止、拒绝或标记为稍后重新发送。此外,该服务器可能配置为不发送错误消息,或者以成功传递的形式发送错误消息,但数据包含错误。

我会开始检查您的邮件服务器配置和帐户权限,然后是它的日志。 此外,您可以考虑使用插件来群发邮件,例如:https://www.e-systems.tech/blog/-/blogs/connecting-liferay-to-mailgun