2016-03-23 7 views
1

ich folgend in meiner sbt-Build-Datei verwenden (Versionen in der Build-Datei erwähnt sind):Problem, wenn SMTP und javax.mail mit

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

ich die Anwendung ausführen kann, die den folgenden Code läuft auf einer Computer, aber nicht ein anderer. Ich habe versucht, den Efeu-Cache aufzuräumen und die Javax-Mail-Pakete neu zu laden, aber das hat nicht geholfen. Irgendeine Idee, was ich falsch machen könnte?

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

Die Eigenschaften nicht null verwendet wird, sind und werden lokal auf einem Rechner verwendet werden (und auch von einem anderen Prozess auf demselben Computer, wo ich in Probleme laufen lasse - dieser Prozess ist nicht mehr auf dem Computer ausgeführt wird und sollte keine offene Verkehrsverbindung haben).

Exception

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

Irgendwelche Gedanken darüber, wie ich über Fehlerbehebung gehen sollte? Ich habe versucht, die Sitzung im Debug ausgeführt wird:

session.setDebug(true); 

Ich glaube nicht, es ist ein Firewall-Problem, weil ich einen anderen Prozess laufen kann die gleiche SMTP-config (Host/Port/Anmeldeinformationen) verwenden und dass in der Lage ist, ohne dass die Verbindung Ausnahmen.

Antwort

2

Das Problem von transitive Abhängigkeit in der Build-Datei verursacht wurde (wobei eine andere Abhängigkeit für die Anwendung eine ältere Version von javax.mail wurde ziehen). Das Ausschließen der transitiven Abhängigkeit (mithilfe der Ausschlussregel in sbt) sollte das Problem beheben.

+2

Beachten Sie, dass Sie zwei Versionen von JavaMail in angegeben haben Ihre Abhängigkeiten. Sie möchten wahrscheinlich nur das com.sun.mail: javax.mail: 1.5.5 Artefakt. –

1

Dieser Fehler bezieht sich auf einen fehlenden smtp.jar auf Ihrem Klassenpfad.

Sie können es als Teil der API Java Mail herunterladen here

+0

Der SMTP-Code ist in einem gemeinsamen Paket, das von verschiedenen Anwendungen verwendet wird. Einer sendet die E-Mail und ein anderer nicht. Ich führe einen mit dem java-jar-Befehl (erstellt das jar), während der zweite von sbt ausgeführt wird. Ich kann die gleichen Prozesse mit sbt auf einem anderen Computer ausführen und es funktioniert gut dort. –

+0

Dann sollten Sie prüfen, ob Ihr Glas hatmtp.jar' in Classpath –

+0

danke - das Problem war aufgrund einer transitiven Abhängigkeit Hinzufügen einer anderen Version von Java-Mail im Build –

Verwandte Themen