Я хочу написать собственный Mailet для почтового сервера Apache James.
Я запускаю Джеймса через Docker через образ linagora/james-project
. Настройка работает (конечно, только локально, но на данный момент этого достаточно), так как я могу настроить учетные записи и подключиться к ним с помощью Thunderbird через IMAP, и я могу отправлять почту между этими учетными записями.
Теперь я хочу развернуть свой собственный 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/";
Поэтому я попытался создать эту папку (в корневой папке Джеймса) и поместить туда JAR, содержащий пользовательский Mailet.
Это по-прежнему выдает ошибки и не работает, однако журнал теперь выглядит так:
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. Кроме того, я экспортировал свою почту со всеми ресурсами, так что там ничего не должно быть упущено. Теперь у меня нет идей.
Кто-нибудь может помочь? Куда мне нужно поместить JAR, содержащий мой пользовательский Mailet?