使用 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 中的排除规则)应该可以解决问题。
我在我的 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 中的排除规则)应该可以解决问题。