首页 > 解决方案 > Liferay 邮件正在发送带有标题的主机名和用户信息

问题描述

我正在使用 Liferay 邮件 (MailServiceUtil/MailEngine) 向用户发送邮件。我已经在 ServerAdministration > Mail 中配置了邮件。我的代码如下:

    InternetAddress toAddress = new InternetAddress(emailTo);            
    InternetAddress fromAddress = new InternetAddress("XXXXXXX","XX");
    MailMessage mailMessage = new MailMessage();
    mailMessage.setTo(toAddress);
    mailMessage.setFrom(fromAddress);
    mailMessage.setSubject(subject);
    mailMessage.setBody(emailbody);
    mailMessage.setHTMLFormat(true);
    MailServiceUtil.sendEmail(mailMessage);

以下信息由上述代码发送:

收到:来自主机名([不可用]。[XXX.XXX.XXX])

消息 ID:<1567646772.21541142172709.JavaMail.user@hostname>

我得到了更改消息 ID 的方法,但我无法更改主机名(主机名到 localhost)。

我尝试通过添加手动指定其他 JavaMail 属性来覆盖上述配置或 portal-ext.propeties 来设置 mail.session.mail.smtp.localhost=localhost。但没有成功。请帮助将其设置为本地主机。

标签: liferayjakarta-mailliferay-6.2

解决方案


我相信你说的是这样的邮件标题:

Received: from host.example.com ([x.x.x.x]) by anotherhost.example.com
 (anotherhost [y.y.y.y]) with ESMTPS (Nemesis) id blablablabla;
 Thu, 01 Nov 2018 11:07:15 +0100

AFAIK,它们是由链中的下一个添加的 - 例如,您的 Liferay 服务器是发起者,并且没有收到任何人的邮件,但它转发到邮件处理程序列表中的下一个跃点。该服务器,下一个跃点,添加有关这封电子邮件来源的信息 - 因此它在 Liferay 或 Javamail 端不受您的控制。

消息 id 是生成的唯一的东西,并且可以覆盖默认值(这就是你得到的)。已转发此邮件的系统的协议由下一个系统构建,因此在始发系统上不可覆盖。

编辑(对您的评论的反应):

即使有办法让列表中的最后一台机器被识别为“localhost”,这有什么好处呢?下一跳将正确给出机器的 IP 地址和反向查找主机名。如果您需要弄清楚邮件来自哪个“本地主机”,您只会使调试变得更加困难。请记住:您的网络中的 localhost 至少与您的机器数量一样多(总计,VM、容器、裸机的总和)


推荐阅读