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

issue when using SMTP and javax.mail

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

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

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

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

正在使用的属性不为空,并且正在一台计算机上本地使用(以及我正在 运行 遇到问题的同一台计算机上的另一个进程 - 该进程不再 运行ning 在那台计算机上,不应该有一个开放的传输连接)。

异常

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);

关于我应该如何解决这个问题有什么想法吗?我已经尝试 运行 在调试中设置会话:

session.setDebug(true);

我认为这不是防火墙问题,因为我可以 运行 使用相同 SMTP 配置 (host/port/credentials) 的另一个进程,并且能够毫无例外地进行连接。

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

您可以将其作为 JavaMail 的一部分下载 API here

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