【问题标题】:Start Mail-Client with Attachment?启动带有附件的邮件客户端?
【发布时间】:2011-08-27 03:21:01
【问题描述】:

我目前正在寻找一种方法(在 Java 中)以定义接收者、主题和正文以及预定义的附件来启动默认邮件客户端。

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

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

【问题讨论】:

  • 定义问题的参数。解决方案只能是Windows吗?它必须是纯java吗?它必须与位数无关吗?
  • 仅 Windows 的工作解决方案也可以。但它必须在 32/64 位和 Windows XP 和 Windows Vista/7 上工作。
  • 这必须高度依赖于平台。

标签: java email email-client jdic


【解决方案1】:

现在可能为时已晚,但以防万一有人仍然发现这个问题:

Desktop.getDesktop().mail(new URI("mailto:email@example.com?subject=attachment_example&body=see_attached_file&attachment=/path/to/attachment"));

应该以独立于平台的方式来解决问题。

【讨论】:

  • 这行不通(我什至测试过),因为 mailto 不支持附件。
  • @ScriptKiddy:你是对的 - mailto RFC 没有实现“附件”扩展。但是一些电子邮件客户尊重它。例如,Linux 的 Evolution 可以工作(至少对我来说!)。雷鸟没有。谢谢指出!
【解决方案2】:

在 Java 中似乎没有任何与操作系统无关的方法来执行此操作,因为并非所有操作系统都提供标准方法来启动默认电子邮件应用程序,而不仅仅是新电子邮件的基本字段。

在 Windows 上,可以使用 MAPI 的 JNI 接口,这将提供对在邮件应用程序中打开电子邮件的更多控制。正如您所提到的,JMAPI 就是一个这样的库 - 但是,似乎有许多具有类似目的的此类名称的库。我发现了一个最近维护的并且看起来相当简单的。它包括一个预构建的二进制 dll 和一个随附的基于 Java JNI 的库。

https://github.com/briandealwis/jmapi

使用这段代码,您似乎只需要构造一个消息对象并调用一个方法来在邮件应用程序中启动它: 导入 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”文件,其中包含您想要包含的已编码为电子邮件一部分的内容和附件。然后可以使用相应电子邮件文件格式的默认处理程序启动此文件。但是,这不能保证打开默认的电子邮件处理程序,文件格式也不能与每个电子邮件客户端兼容。

【讨论】:

  • 这个 JMapi 正是我上面提到的库,所以它不适用于必须的 64 位系统。正如您所指出的,使用 eml 文件的解决方案是不安全的。例如。我的电脑没有安装兼容 EML 的邮件客户端。
  • +1 表示干净的代码被剪断,-1 表示忽略解决方案应该在 64 位系统上工作
  • 我正在尝试在我的 java web 应用程序中使用(开发环境是:Ubuntu 12.04Jdk6)。但是,我收到以下错误。 java.lang.UnsatisfiedLinkError: org.jdesktop.jdic.desktop.internal.impl.WinAPIWrapper.RegOpenKey(I[BI)[I
  • @vissu 不幸的是,这是一个仅限 Windows 的解决方案,因为它使用 JNI 来使用 Windows 本机库(非 JVM)。
【解决方案3】:

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

【讨论】:

  • 问题是除了 Desktop-API 之外是否有任何可靠的方法可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多