启动带有附件的邮件客户端?
我目前正在搜索一种方法(在Java中)启动默认邮件客户端,其中包含定义的接收器,主题和正文以及预定义的附件。
由于 RFC 的限制,java.awt.Desktop.mail-Method 不能处理附件。JDIC项目已经死亡,JMAPI项目在建设过程中相当模糊。(需要 1.4 Mozilla-Sources)我必须自己为64位系统构建它。
有替代方案吗?我已经阅读了这里的文章,但是使用rundl32.dll和这样的“解决方案”不是我想放在生产代码中的东西。
我目前正在搜索一种方法(在Java中)启动默认邮件客户端,其中包含定义的接收器,主题和正文以及预定义的附件。
由于 RFC 的限制,java.awt.Desktop.mail-Method 不能处理附件。JDIC项目已经死亡,JMAPI项目在建设过程中相当模糊。(需要 1.4 Mozilla-Sources)我必须自己为64位系统构建它。
有替代方案吗?我已经阅读了这里的文章,但是使用rundl32.dll和这样的“解决方案”不是我想放在生产代码中的东西。
在 Java 中似乎没有任何与操作系统无关的方法可以执行此操作,因为并非所有操作系统都提供一种标准方法来启动默认电子邮件应用程序,其中包含新电子邮件的基本字段以外的字段。
在 Windows 上,可以使用 JNI 接口来访问 MAPI,这将为在邮件应用程序中打开电子邮件提供更多控制。正如你所提到的,JMAPI就是这样一个库 - 但是,似乎有许多具有类似目的的库以这样的名称命名。我发现了一个最近维护的,看起来相当直截了当。它包括一个预构建的二进制 dll 和一个附带的基于 Java JNI 的库。
https://github.com/briandealwis/jmapi
有了这个代码,似乎你只需要构造一个消息对象,并调用一个方法在邮件应用程序中启动它:import jmapi.*;...
if (JMAPI.isMapiSupported()) {
Message msg = new Message();
msg.setSubject("test!");
msg.setBody("Hello world");
List<String> toAddresses = new LinkedList<String>();
toAddresses.add("example@example.com");
msg.setToAddrs(toAddresses);
List<String> attachPaths = new LinkedList<String>();
//Must be absolute paths to file
attachPaths.add("C:\Users\Documents\file.jpg");
msg.setAttachments(attachPaths);
JMAPI.open(msg);
}
另一种可能适用于Windows和Mac(以及可能的其他操作系统)的可能性是生成一个“.eml”或“.msg”文件,其中包含您希望包含的内容和附件已编码为电子邮件的一部分。然后,可以使用相应电子邮件文件格式的默认处理程序启动此文件。但是,这不能保证打开默认的电子邮件处理程序,文件格式也不会与每个人的电子邮件客户端兼容。
(据我所知)目前无法添加预定义的附件,但您可以使用java.awt.Desktop.mail.执行您提到的其他操作(以使用定义的收件人,主题和正文启动默认邮件客户端)。我相信你已经在这里检查过了。不过,这将是非常有用的。