我正在尝试从我使用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但仍然出现此错误。这里有人知道问题是什么吗?
由于
答案 0 :(得分:5)
我最好的猜测是你的类路径上有多个版本的mail.jar(或包含相同代码的各种其他版本)。你说,你在tomcat中找到了mail.jar - 我想它也包含在你的webapplication的WEB-INF / lib中:从那里删除它,你的webapp必须使用tomcat的全局类路径中的那个。
您可以将Maven中的依赖项配置为“已提供”,以便Maven知道您将依赖该代码,但不会将其与您的应用程序一起部署
引入您的评论:不要只是“重新部署”,而是取消部署(删除Web应用程序),否则tomcat可能会保留您之前提供的库。因此你不会再复制它们,但它们仍然在那里。
答案 1 :(得分:0)
我忘记从已部署项目的WEB-INF中删除mail.jar文件,并且再次使用所提供的依赖项进行部署并未自动删除该文件。
所以我从webapp页面中删除了该项目并重新部署了该项目。因此它起作用了。