使用附件启动邮件客户端?

sch*_*gel 21 java email email-client jdic

我正在寻找一种方法(在Java中)来启动默认的邮件客户端,其中包含已定义的接收者,主题和正文以及预定义的附件.

由于RFC的限制,java.awt.Desktop.mail-Method不能使用附件.JDIC项目已经死亡,JMAPI项目在建设过程中相当模糊.(需要1.4 Mozilla-Sources)我必须自己为64位系统构建它.

还有其他选择吗?我已经阅读了这里的文章但是使用了rundl32.dll并且这样的"解决方案"不是我想放在生产代码中的东西.

Raj*_*ani 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);
    }
Run Code Online (Sandbox Code Playgroud)

另一种可能适用于Windows和Mac(以及可能的其他操作系统)的可能性是生成".eml"或".msg"文件,其中包含您希望包含的内容和附件已编码为电子邮件的一部分.然后可以使用相应电子邮件文件格式的默认处理程序启动此文件.但是,这不能保证打开默认的电子邮件处理程序,文件格式也不会与所有电子邮件客户端兼容.


pol*_*rto 0

(据我所知)目前无法添加预定义附件,但您可以使用 java.awt.Desktop.mail 执行您提到的其他操作(使用定义的接收者、主题和正文启动默认邮件客户端)。 .相信你已经查到这里了。不过这会很有用。