来自自定义 portlet 的 Liferay 7 MailService.sendMail 不仅仅在主机服务器上工作
Liferay 7 MailService.sendMail from a custom portlet doesn't work only on HOST SERVER
我在 Liferay 7 上有一个自定义 portlet 的奇怪问题需要解决:
- MailService.sendMail 正在我的电脑上使用 google smtp 和个人帐户工作:这意味着代码正在工作...
- 在我的主机服务器上,使用 final-smtp 发送电子邮件工作正常:我尝试使用 telnet final-smtp 端口的 root 和 liferay 用户。
- 在 HOST SERVER 上的 Liferay 服务器上,可以正常发送电子邮件:如果我忘记密码,Liferay 会向我发送电子邮件。
- 但是...如果我尝试从 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
我在 Liferay 7 上有一个自定义 portlet 的奇怪问题需要解决:
- MailService.sendMail 正在我的电脑上使用 google smtp 和个人帐户工作:这意味着代码正在工作...
- 在我的主机服务器上,使用 final-smtp 发送电子邮件工作正常:我尝试使用 telnet final-smtp 端口的 root 和 liferay 用户。
- 在 HOST SERVER 上的 Liferay 服务器上,可以正常发送电子邮件:如果我忘记密码,Liferay 会向我发送电子邮件。
- 但是...如果我尝试从 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