Ich versuche mein Java-Projekt einzurichten, um E-Mails senden zu können (per E-Mail, wenn es darauf ankommt) und bekomme jedes Mal, wenn ich es versuche, "javax.mail.NoSuchProviderException: Kein Provider für smtps" um die folgende Zeile auszuführen (was Kopieren / Einfügen von ihrem Beispiel ist).
%Vor%Ich habe mich umgeschaut und festgestellt, dass dies normalerweise ausgelöst wird, weil Sie die mail.jar nicht in Ihrem Klassenpfad haben, aber ich habe tatsächlich mail.jar. Da ich JDK 1.6 verwende, muss ich die activation.jar nicht in die FAQ aufnehmen ( Ссылка ). Außerdem scheint die activation.jar in Version 1.4.7 von Javamail nicht vorhanden zu sein.
Für den Fall, dass etwas beschädigt wird, habe ich die gesamte Zip-Datei von der Orakel-Website heruntergeladen, extrahiert und das Glas frisch hinzugefügt (nachdem ich das alte Glas gelöscht habe) und bekomme immer noch denselben Fehler. Irgendwelche Gedanken, was das Problem an diesem Punkt sein könnte?
EDIT: Hier ist die vollständige Stapel-Trace, die gedruckt wird:
%Vor%Es stellte sich also heraus, dass eine veraltete Version von mail.jar in einem Projekt enthalten war, das ich referenzierte. Nach der Aktualisierung dieser Kopie der mail.jar wurde das Problem behoben.
Gibt es zu einem späteren Zeitpunkt eine Möglichkeit, solche Jar-Konflikte zu protokollieren oder sichtbar zu machen?
Nur für den Fall, dass jemand den gleichen Fehler macht wie ich: Sie müssen Kleinbuchstaben verwenden für die Protokollauflösung zu arbeiten. Wenn Sie SMTP
als Protokollnamen anstelle von smtp
eingeben, erhalten Sie NoSuchProviderException
. Es funktioniert höchstwahrscheinlich für alle anderen Anbieter gleich.
Stellen Sie sicher, dass Sie den Pfad javax.mail.jar in Ihrem Build haben. Wenn Sie Eclipse verwenden, müssen Sie möglicherweise das Projekt im Datei-Explorer aktualisieren oder mit der rechten Maustaste anklicken, den Build-Pfad konfigurieren, externe JAR hinzufügen und dann dem Build-Pfad hinzufügen. E-Mail senden mit Java gibt Arbeitscode (ich habe es getestet) für den Fall, dass Sie nur wollen schau über deine. Wenn das nicht das Problem ist, oder Sie nicht Eclipse verwenden, wäre ein Stack-Trace nett
Wenn Sie die Mail-API verwenden, stellen Sie sicher, mit welchem Protokoll Sie arbeiten möchten? In diesem Fall fehlt smtp.jar mit Ihrem Eclipse-Projekt.
gibt es mehrere Gläser für verschiedene Protokolle sind in Mail API verfügbar. EX: dsn.jar, gimap.jar, imap.jar, mailapi.jar, pop3.jar, smtp.jar
JavaMail fragt den ClassLoader nach der Konfigurationsdatei, die die Protokollanbieter konfiguriert. Wenn der ClassLoader nicht korrekt funktioniert, kann JavaMail die Konfigurationsdatei nicht finden. Es gibt eine Inkompatibilität zwischen der Arbeitsweise der OSGi ClassLoader und der von JavaMail erwarteten, was zu diesem Problem führen kann. Wenn Sie Ihre Anwendung in Eclipse selbst ausführen, könnte dies das Problem erklären. Eine weitere häufige Ursache für dieses Problem ist, dass Sie die Datei mail.jar so in Ihr Projekt importieren, dass die Klassendateien aus der JAR-Datei extrahiert und in Ihre Anwendung aufgenommen werden, die Konfigurationsdateien jedoch zurückgelassen werden.
Versuchen Sie, Ihr Programm über die Befehlszeile mit dem Befehl "java" und mit der Datei mail.jar in Ihrem CLASSPATH auszuführen.
zum Wohle anderer mit einem ähnlichen Problem wie ich.
vergesst nicht,
einzustellen %Vor%statt
%Vor%Ich hatte mail.jar und activation.jar in tomcat's lib-Verzeichnis und mailapi.jar im lib-Verzeichnis der Anwendung. Anwendung las mailapi.jar während der Laufzeit, da mailapi.jar leichte Version der Mailing-API ist und es smtp.jar benötigt, warum die Anwendung smtp exception warf. Also, wenn Sie diese Ausnahme loswerden wollen,
Bitte lösen Sie den Konflikt zwischen mail.jar und mailapi.jar durch:
(Zu Ihrer Information: Ich habe das Dateisystem durchsucht, um E-Mail-bezogene JAR-Dateien ausfindig zu machen und habe erfahren, dass ich im folgenden Pfad (im Klassenpfad hinzugefügt) eine in Konflikt stehende JAR-Datei hat: C: \ workspace.metadata.plugins \ org.eclipse .wst.server.core \ tmp0 \ wtpwebapps \ testapp \ WEB-INF \ lib)