0

我正在尝试发送带有附件的电子邮件,而不使用第 3 方邮件服务器(如 smtp.gmail.com)。

基础/准备

在这个线程中,我按照建议先构造 MimeMessage,然后通过myMailQue.queMail(msg);.

它在测试包中工作正常。我在终端上得到以下输出:

Jul 31, 2015 2:28:00 PM Aspirin run
INFORMATION: QueManager.run(): QueManager started.
Jul 31, 2015 2:28:01 PM Aspirin run
INFORMATION: RemoteDelivery (RemoteDelivery-1).run(): Try to give back RemoteDelivery object into the pool.

邮件在几秒钟后到达。

问题

当我尝试在我的 OSGi 框架 (felix) 中使用它时,不会发送任何邮件。没有任何异常或任何其他信息打印,即使是上面提到的输出!

我找不到 aspirin-jar 的捆绑版本,所以我自己用 bnd 转换了它。像这样:

java -jar bnd-2.1.0.jar wrap jar/aspirin-0.8.3.jar

我的测试

在我的捆绑文件夹中使用转换后的 jar,没有接线包问题,所以它应该可以工作吗?问题示例:

Unresolved constraint in bundle edu.hm.ee.hem.validation [5]: Unable to resolve 5.0: missing requirement [5.0] osgi.wiring.package; (osgi.wiring.package=org.masukomi.aspirin.core)

我调用queMail(msg)的代码能够调用阿司匹林包的其他方法。例如,我在myMailQue.getQueueSize()前后调用一次函数queMail(msg)。结果是 0 和 1,这很有意义(imo)。


我对这种设置不起作用感到非常困惑,尤其是没有任何异常的情况下,很难理解出了什么问题

所以我认为我的测试包和框架之间的唯一区别是转换后的 jar。有谁知道我该如何解决这个问题?

非常感谢您提前


PS这是我在这里的第一个问题(我已经阅读了很多;)所以如果我遗漏了任何重要信息或者我的问题的格式难以理解,请给我一个提示。

4

1 回答 1

0

就像你提到的阿司匹林似乎没有为 OSGi 做好准备。简单地包装一个 jar 并不总是足以让它准备好 OSGi。

如果您查看 Aspirin 代码,您会发现它在某些地方使用类名来引用实现类。在 OSGi 中,类加载器是每个包的,并且只提供使用 Import-Package 可见的包。因此,例如,如果您为 Aspirin 的其中一个接口提供您自己的实现并在配置中提供类名,那么 aspirin 将无法在其自己的 OSGi 类加载器中加载这样的类。

解决方案是要么拥有允许设置类而不是类名的 API 方法,要么允许用户提供除类名之外知道类的类加载器。

因此,您可能必须让阿司匹林的作者了解您的情况并要求他使代码与 OSGi 兼容。

于 2015-07-31T14:21:56.033 回答