无法从liferay挂钩发送邮件

时间:2013-04-03 12:23:05

标签: email liferay hook sendmail

我正在尝试从我使用MailEngine和MailServiceUtil的钩子发送电子邮件,但我还没有能够发送它。我的代码如下:

InternetAddress from=null;
InternetAddress to=null;
try {
 from = new  InternetAddress("test@test.com", "Admin admin");
 to = new InternetAddress(newUser.getEmailAddress(), newUser.getFirstName());
} catch (UnsupportedEncodingException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
} 
MailMessage mailMessage = new MailMessage();

mailMessage.setFrom(from);
mailMessage.setTo(to);

mailMessage.setBody(body); 
mailMessage.setSubject(subject);
MailServiceUtil.sendEmail(mailMessage);

在此我收到以下错误,

java.lang.LinkageError: loader constraint violation: when resolving method "com.liferay.portal.kernel.mail.MailMessage.setFrom(Ljavax/mail/internet/InternetAddress;)V" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/lftechnology/sbworkbench/hooks/createaccount/CustomCreateAccountAction, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, com/liferay/portal/kernel/mail/MailMessage, have different Class objects for the type javax/mail/internet/InternetAddress used in the signature

我在liferay安装中找到了mail.jar文件,但我无法使用它。我尝试使用artifactid com.sun在我的pom文件中导入javax.mail但仍然出现此错误。这里有人知道问题是什么吗?

由于

2 个答案:

答案 0 :(得分:5)

我最好的猜测是你的类路径上有多个版本的mail.jar(或包含相同代码的各种其他版本)。你说,你在tomcat中找到了mail.jar - 我想它也包含在你的webapplication的WEB-INF / lib中:从那里删除它,你的webapp必须使用tomcat的全局类路径中的那个。

您可以将Maven中的依赖项配置为“已提供”,以便Maven知道您将依赖该代码,但不会将其与您的应用程序一起部署

引入您的评论:不要只是“重新部署”,而是取消部署(删除Web应用程序),否则tomcat可能会保留您之前提供的库。因此你不会再复制它们,但它们仍然在那里。

答案 1 :(得分:0)

我忘记从已部署项目的WEB-INF中删除mail.jar文件,并且再次使用所提供的依赖项进行部署并未自动删除该文件。

所以我从webapp页面中删除了该项目并重新部署了该项目。因此它起作用了。