如何通过MailServiceUtil检查在Liferay 6.1.20EE中是否成功发送电子邮件

7
我正在使用Liferay 6.1.20,我的Portlet正在使用Liferay邮件服务通过在Liferay配置的SMTP服务器发送电子邮件。 我的问题是:是否可以检查SMTP服务器是否可用?或者是否可以检查电子邮件是否成功发送?如果SMTP服务器不可用,我想向用户输出一条消息。实际上,我只能在服务器控制台上看到以下行:
14:06:47,679 WARN  [liferay/mail-1][MailEngine:560] Failed to connect to a valid mail server. Please make sure one is properly configured. Could not connect to SMTP host: localhost, port: 25

我希望有人能为我提供一个解决方案。谢谢!

3个回答

4
基本上有两个问题会阻止您使用MailServiceUtil服务发送电子邮件时发现任何故障。
首先,消息是通过Liferay消息总线异步发送的,因此用户可以更快地得到响应,但您永远不知道是否在途中发生了任何故障。
其次,消息最终到达MailEngine,所有异常都被捕获并仅写入日志。
因此,我建议您使用ext-plugin(它在util-java中)覆盖MailEngine类以不同的方式处理异常,然后直接从插件中使用它,而不是仅将所有内容推送到消息总线。

2
自Liferay 6.2以来,如果您在portal-ext.properties文件中设置了mail.throws.exception.on.failure=true,则MailEngine类在出现错误时也会抛出com.liferay.util.mail.MailEngineException,而不仅仅是记录日志。

0

这是一个非常老的问题,但由于我一直来到这里,我将其留给可能需要的任何人(在7.3上测试过)。

我们可以使用以下Groovy脚本测试邮件流是否正常:

import com.liferay.mail.kernel.service.MailServiceUtil
import javax.mail.*
import javax.mail.internet.*
import com.liferay.mail.kernel.model.MailMessage;

def from = new InternetAddress("no-reply@example.com")
def to = new InternetAddress ("where@example.com")
def mail = new MailMessage(from, to, "subject", "test message", false)
MailServiceUtil.sendEmail(mail)

而且,如其他回答所述,查看异常的属性仍然有效。
mail.throws.exception.on.failure=true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接