我正在使用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);
以下信息是通过上述代码发送的:
已收到:来自主机名([UNAVAILABLE。[XXX.XXX.XXX])
和
消息ID:<1567646772.21541142172709.JavaMail.user@hostname>
我有更改消息ID的方法,但是我无法更改主机名(将主机名更改为localhost)。
我尝试通过添加手动指定其他JavaMail属性来覆盖以上配置或portal-ext.properties来设置mail.session.mail.smtp.localhost = localhost。但是没有成功。请帮助将此设置为本地主机。
答案 0 :(得分:0)
我相信您说的是这样的邮件头:
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地址和反向查找主机名。而且,如果您需要弄清楚邮件起源于哪个“本地主机”,则只会使调试更加困难。切记:网络中的本地主机数量至少与计算机数量一样(总共,虚拟机,容器,裸机之和)
答案 1 :(得分:0)
消息ID源自InternetAddress.getLocalAddress的结果,您可以通过设置mail.from属性来完全控制。