javax.mail.NoSuchProviderException:没有smtps的提供者

Jun*_*ter 9 java jar jakarta-mail

我正在尝试设置我的Java项目以便能够发送电子邮件(通过g-mail,如果它很重要)并且每次我尝试运行时都会收到"javax.mail.NoSuchProviderException:没有smtps的提供者"以下行(从他们的例子中复制/粘贴).

Transport transport = session.getTransport("smtps");
Run Code Online (Sandbox Code Playgroud)

我环顾四周,发现这通常被抛出,因为你没有在你的类路径中包含mail.jar,但事实上我确实包含了mail.jar.由于我运行的是JDK 1.6,因此我不需要根据FAQ(http://www.oracle.com/technetwork/java/javamail/faq-135477.html#classpath)包含activation.jar .此外,activation.jar似乎不存在于javamail的1.4.7版本中.

为了防止出现问题,我从oracle的网站上重新下载了整个zip文件,将其解压缩并添加了jar(在删除旧jar后),我仍然遇到同样的错误.关于这个问题到底有什么想法吗?

编辑:这是正在打印的完整堆栈跟踪:

javax.mail.NoSuchProviderException: No provider for smtps
    at javax.mail.Session.getProvider(Session.java:433)
    at javax.mail.Session.getTransport(Session.java:627)
    at javax.mail.Session.getTransport(Session.java:608)
... my code that calls getTransport() ...
    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)
... more of my code ...
    at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)

小智 8

当您使用 Mail API 时,请确保您希望使用哪种协议?在这种情况下,您的 eclipse 项目缺少 smtp.jar。

邮件 api 中有几个用于不同协议的 jars。例如:dsn.jar、gimap.jar、imap.jar、mailapi.jar、pop3.jar、smtp.jar

  • 这确实是很多情况下的答案。大多数人会更新 javamail 并且确实可以工作,但是出现的问题是版本 1.4.7。1.4.7 版本需要 smtp.jar。当您无法更新javamail版本时,这就是解决方案! (2认同)

Jun*_*ter 7

事实证明,问题是mail.jar的过时版本包含在我引用的项目中,并且在更新mail.jar的副本时,问题已得到解决.

为了将来参考,有没有办法记录或提供这种jar冲突的可见性?

https://confluence.atlassian.com/confkb/cannot-send-email-due-to-javax-mail-nosuchproviderexception-smtp-error-154079.html


Dar*_*usz 5

万一有人犯了与我相同的错误:你必须使用小写字母才能使协议解析起作用.如果您键入SMTP协议名称而不是smtp您将获得NoSuchProviderException.对于所有其他提供商,它很可能以相同的方式工作.