我正在寻找一种方法(使用Java)来启动默认邮件客户端,其中包含已定义的接收者,主题和正文以及预定义的附件。
由于RFC的限制,java.awt.Desktop.mail-Method无法使用附件。 JDIC项目已经死亡,JMAPI项目在建设过程中相当模糊。 (需要1.4 Mozilla-Sources)我必须自己为64位系统构建它。
还有其他选择吗?我已经阅读了这里的文章,但是使用了rundl32.dll,而这些“解决方案”并不是我想放在生产代码中的东西。
答案 0 :(得分:6)
似乎没有任何与操作系统无关的方法在Java中执行此操作,因为并非所有操作系统都提供了一种标准方法来启动默认电子邮件应用程序,而不仅仅是新电子邮件的基本字段。
在Windows上,可以使用MAPI的JNI接口,这将提供对在邮件应用程序中打开电子邮件的更多控制。正如您所提到的,一个这样的库是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”文件,其中包含您希望包含的内容和附件已作为电子邮件的一部分进行编码。然后可以使用相应电子邮件文件格式的默认处理程序启动此文件。但是,这不能保证打开默认的电子邮件处理程序,文件格式也不会与所有电子邮件客户端兼容。
答案 1 :(得分:0)
(据我所知)目前无法添加预定义附件,但您可以使用java.awt.Desktop执行您提到的其他操作(使用已定义的接收者,主题和正文启动默认邮件客户端) .mail ..我相信你已经检查了here。这会非常有用。
答案 2 :(得分:0)
现在可能已经太晚了,但万一有人仍然发现这个问题:
Desktop.getDesktop().mail(new URI("mailto:email@example.com?subject=attachment_example&body=see_attached_file&attachment=/path/to/attachment"));
应该以独立于平台的方式做到这一点。