【问题标题】:How to open email client with attachment from Java如何从 Java 打开带有附件的电子邮件客户端
【发布时间】:2013-01-11 05:38:01
【问题描述】:

这个问题已经太多了。 可能重复:
1.How to open an email client and automatically attach file in java
2.Start Mail-Client with Attachment?

我的要求是: 1. 从 Java 打开默认电子邮件客户端。
2. 添加来自 Java 的“收件人”地址、主题和正文。
3. 将文件附加到邮件中

但是这两个对我不起作用...
JDIC:
当我使用 JDIC 时出现以下错误:
java.lang.ClassNotFoundException: org.jdesktop.jdic.desktop.internal.impl.ServiceManagerStub_unix

JMAPI:
当我使用 JMAPI 时,我得到了关注。

java.lang.UnsatisfiedLinkError: org.jdesktop.jdic.desktop.internal.impl.WinAPIWrapper.RegOpenKey(I[BI)[I
    at org.jdesktop.jdic.desktop.internal.impl.WinAPIWrapper.RegOpenKey(Native Method)
    at org.jdesktop.jdic.desktop.internal.impl.WinAPIWrapper.WinRegQueryValueEx(WinAPIWrapper.java:170)
    at jmapi.JMAPI.isMapiSupported(JMAPI.java:40)
    at com.turborep.turbotracker.mail.SendQuoteMail.send(SendQuoteMail.java:120)
    at com.turborep.turbotracker.mail.SendEmail.main(SendEmail.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

我假设,JMAPI 只能在 windows 机器上工作(因为需要打开 jdic.dll 库)。
我的机器是:Ubuntu 12.04 & JDK6

在 Ubuntu 中是否还有其他可能实现这一点。

提前致谢。

**编辑:** 我的机器运行的是 64 位 JVM。

【问题讨论】:

    标签: java email-attachments mapi email-client jdic


    【解决方案1】:

    您(或您包含的某些库)正在使用 JDesktop Integration Components (JDIC) project,它针对每个目标操作系统都有一个版本,并且需要本机库(通过 JNI 使用)。

    你的第一个错误

    java.lang.ClassNotFoundException: org.jdesktop.jdic.desktop.internal.impl.ServiceManagerStub_unix
    

    可能是由于在 unix 机器上部署了 windows(或任何非 unix)版本的库。

    当你的第二个错误

    java.lang.UnsatisfiedLinkError: org.jdesktop.jdic.desktop.internal.impl.WinAPIWrapper.RegOpenKey(I[BI)[I
        at org.jdesktop.jdic.desktop.internal.impl.WinAPIWrapper.RegOpenKey(Native Method)
    

    意味着您没有正确包含所需的 dll,或者您正在使用 32 位 dll 在 64 位 JVM 上运行 - 请参阅更多信息 here(这是与您有确切问题的人)

    【讨论】:

    • 感谢您的即时和宝贵的回复。在 2nd,是的,我的 JVM 是 64 位的。在我的情况下不能使用 32 位 dll 吗?那么请引导我走向正确的方向。 (因为 JMAPI 使用的是 32 位 jdic.dll)。
    • @vissu - 最快的解决方案是使用 32 位 jvm(在 64 位 Windows 上运行良好) - 除非您无法容纳 ~1.5GB 堆。不幸的是,我找不到该库的任何二进制文件,只有源代码 (java.net/projects/jdic/sources/svn/show),但如果您有时间和资源,您可能可以编译它的 64 位版本。
    • 非常感谢。我将尝试编译 64 位的源代码。
    • Hai @radai,我们可以通过任何小程序实现这一点吗?这将询问客户端用户运行和打开电子邮件客户端的权限。请给我建议。
    • @vissu - 有关打开系统默认电子邮件客户端的方法,请参阅此 - stackoverflow.com/questions/17373/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2015-01-01
    • 2011-07-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多