我想为Apache James Mail Server安装一个自定义Mailet。
我通过linagora/james-project
图片通过Docker运行James。设置工作(当然只在本地,但目前已足够),因为我可以设置帐户并通过IMAP与Thunderbird连接,我可以在这些帐户之间发送邮件。
现在我想将自定义Mailet部署到此设置。我使用本教程尝试过:https://james.apache.org/server/3/dev-extend-mailet.html (我不得不创建文件夹/ conf / lib /,因为它不存在)但它不起作用。在日志中我看到像这样的错误:
james | [main] INFO org.apache.james.mailetcontainer.lib.AbstractStateMailetProcessor - Matcher All instantiated.
james | [main] ERROR org.apache.james.mailetcontainer.lib.AbstractStateMailetProcessor - Unable to init mailet com.jeremiaslubberger.mailets.TestMailet: javax.mail.MessagingException: Can not load mailet com.jeremiaslubberger.mailets.TestMailet;
james | nested exception is:
james | java.lang.ClassNotFoundException: com.jeremiaslubberger.mailets.TestMailet
james | javax.mail.MessagingException: Can not load mailet com.jeremiaslubberger.mailets.TestMailet;
james | nested exception is:
james | java.lang.ClassNotFoundException: com.jeremiaslubberger.mailets.TestMailet
通过搜索源代码,我找到了文件ExtendedClassLoader.java
,其中有一行
public static final String EXTENSIONS_JARS_FOLDER_NAME = "extensions-jars/";
所以我尝试创建这个文件夹(在James根文件夹中)并将包含自定义Mailet的JAR放在那里。
这仍会产生错误但不起作用,但Log现在看起来像这样:
james | [main] INFO org.apache.james.mailetcontainer.lib.AbstractStateMailetProcessor - Matcher All instantiated.
james | Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mailet/GenericMailet
james | at java.lang.ClassLoader.defineClass1(Native Method)
james | at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
james | at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
james | at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
james | at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
james | at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
james | at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
james | at java.security.AccessController.doPrivileged(Native Method)
james | at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
james | at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
james | at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
james | at org.apache.james.utils.ExtendedClassLoader.locateClass(ExtendedClassLoader.java:80)
james | at org.apache.james.utils.GuiceGenericLoader.instanciate(GuiceGenericLoader.java:37)
james | at org.apache.james.utils.GuiceMailetLoader.getMailet(GuiceMailetLoader.java:45)
我的自定义Mailet确实扩展了GenericMailet,但所有其他(默认)Mailet也是如此。此外,我导出了我的mailet包括所有资源,因此应该没有任何遗漏。现在我没有想法了。
有人可以帮忙吗?我需要在哪里放置包含我的自定义Mailet的JAR?
答案 0 :(得分:0)
它是Apache James文件夹中的conf / lib文件夹。此文件夹以每个版本提供的默认ZIP(例如3.0.1)提供。
此外,您需要在类路径中使用mailet-base和mailet-api jar(包装Generic mailet)。通常就是这种情况。
extension-jars文件夹特定于Guice布线(您似乎没有使用,因为您依赖于Spring布线)
不要犹豫,https://gitter.im/apache/james-project与我们联系,我们会更加反应......
答案 1 :(得分:0)
您应该从 pwd = /james-root/bin/
运行 James。否则,您将在应用程序启动时收到 ClassNotFoundException。这是因为 run.sh
中的相对类路径定义。
我花了很多时间才弄明白))