使用SMTP和javax.mail时出现问题

时间:2016-03-23 17:19:59

标签: java smtp javamail

我在我的sbt构建文件中使用以下内容(版本在构建文件中提到):

  "javax.mail" % "javax.mail-api" % "1.5.5",
  "javax.mail" % "mail" % "1.4.7",

我可以在一台计算机上运行运行以下代码的应用程序,但不能运行另一台计算机。我已经尝试清理常春藤缓存并重新加载javax邮件包,但这没有帮助。知道我可能做错了什么吗?

final Transport transport = session.getTransport(prop.getProperty("mail.smtp.protocol"));
transport.connect(prop.getProperty("smtp.username"), "");

正在使用的属性不是null并且正在一台计算机上本地使用(也是在我遇到问题的同一台计算机上的另一个进程 - 该进程不再在该计算机上运行且不应该打开运输连接)。

异常

java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.<init>(Ljava/io/InputStream;Lcom/sun/mail/util/MailLogger;)V
    at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:2014)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1936)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
    at javax.mail.Service.connect(Service.java:291)
    at javax.mail.Service.connect(Service.java:172)
    at javax.mail.Service.connect(Service.java:192)

com.sun.mail.smtp.SMTPTransport v1.4.7

private void More ...initStreams() throws IOException {
2011    boolean quote = PropUtil.getBooleanSessionProperty(session,
2012                    "mail.debug.quote", false);
2013
2014    traceInput =
2015        new TraceInputStream(serverSocket.getInputStream(), traceLogger);

有关如何对此进行故障排除的任何想法?我试过在debug中运行会话:

session.setDebug(true);

我认为它不是防火墙问题,因为我可以使用相同的SMTP配置(主机/端口/凭证)运行另一个进程,并且能够连接而没有任何异常。

2 个答案:

答案 0 :(得分:2)

问题是由构建文件中的传递依赖引起的(其中另一个依赖是为应用程序提取旧版本的javax.mail)。排除传递依赖(使用sbt中的排除规则)应该解决问题。

答案 1 :(得分:1)

此错误与类路径中缺少smtp.jar有关。

您可以将其作为JavaMail API here

的一部分下载