Java Mail : Pas de fournisseur de smtp
Je suis à l'aide de JavaMail pour faire une simple application qui envoie un e-mail quand il trouve des fichiers dans un répertoire. J'ai réussi à obtenir, il a travaillé à partir d'Eclipse. Je lance l'application et il a envoyé l'e-mail sans erreurs.
Mais, quand j'ai créé le bocal, et exécuté, il échoue dans l'e-mail de l'envoi de la partie.
Il donne à cette exception:
javax.mail.NoSuchProviderException: No provider for smtp
at javax.mail.Session.getProvider(Session.java:460)
at javax.mail.Session.getTransport(Session.java:655)
at javax.mail.Session.getTransport(Session.java:636)
at main.java.util.MailManager.sendMail(MailManager.java:69)
at main.java.DownloadsMail.composeAndSendMail(DownloadsMail.java:16)
at main.java.DownloadsController.checkDownloads(DownloadsController.java:51)
at main.java.MainDownloadsController.run(MainDownloadsController.java:26)
at java.lang.Thread.run(Unknown Source)
Je suis l'aide de la bibliothèque dans cette méthode:
public static boolean sendMail(String subject, String text) {
noExceptionsThrown = true;
try {
loadProperties();
} catch (IOException e1) {
System.out.println("Problem encountered while loading properties");
e1.printStackTrace();
noExceptionsThrown = false;
}
Properties mailProps = new Properties();
String host = "mail.smtp.host";
mailProps.setProperty(host, connectionProps.getProperty(host));
String tls = "mail.smtp.starttls.enable";
mailProps.setProperty(tls, connectionProps.getProperty(tls));
String port = "mail.smtp.port";
mailProps.setProperty(port, connectionProps.getProperty(port));
String user = "mail.smtp.user";
mailProps.setProperty(user, connectionProps.getProperty(user));
String auth = "mail.smtp.auth";
mailProps.setProperty(auth, connectionProps.getProperty(auth));
Session session = Session.getDefaultInstance(mailProps);
//session.setDebug(true);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(messageProps.getProperty("from")));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
messageProps.getProperty("to")));
message.setSubject(subject);
message.setText(text);
Transport t = session.getTransport("smtp");
try {
t.connect(connectionProps.getProperty("user"), passwordProps
.getProperty("password"));
t.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
System.out.println("Error encountered while sending the email");
e.printStackTrace();
noExceptionsThrown = false;
} finally {
t.close();
}
} catch (Exception e) {
System.out.println("Error encountered while creating the message");
e.printStackTrace();
noExceptionsThrown = false;
}
return noExceptionsThrown;
}
Je suis le chargement de ces valeurs à partir des fichiers de propriétés.
mail.smtp.host=smtp.gmail.com
mail.smtp.starttls.enable=true
mail.smtp.port=587
mail.smtp.auth=true
J'ai essayé de changer l'hôte par ssl://smtp.de gmail.com, le port 465 (juste pour essayer quelque chose de différent), mais ça ne fonctionne pas non plus. De toute façon, si il fonctionne bien à partir d'Eclipse avec les paramètres d'origine, je suppose que les valeurs sont correctes, mais le problème, c'est la création du jar. Je ne sais pas beaucoup sur les résultats possibles ou des changements lors de la création d'un jar.
Pourrait le JavaMail les bibliothèques d'une certaine manière tournent mal quand le bocal est-il créé?
Avez-vous des idées?
OriginalL'auteur pablof | 2010-06-05
Vous devez vous connecter pour publier un commentaire.
Le soutien des pots: mail.jar et activation.jar ne sont pas sur votre classpath. Lorsque vous construisez votre pot, vous devez inclure dans votre classpath.
Je ne suis pas familier avec eclipse. Mais c'est certainement quelque chose qui a trait à la variable classpath. Vous pouvez changer la façon dont vous exécutez le pot comme à l'étape suivante. Inclure le chemin d'accès à ces deux pots lorsque vous exécutez votre bocal. Donc, hors de ma tête, quelque chose comme: jar-cp ./full/path/to/activation.jar:./full/path/to/mail.jar -pot yourjarname.jar
Merci Mike. Je vais essayer avec cette.
OriginalL'auteur Mike
J'ai eu le même problème.
Vous pouvez résoudre le problème en faisant de la Runnable JAR file dans Eclipse et à l'aide de la bibliothèque d'options de traitement de. Sélectionnez la seconde lors de la prise de votre BOCAL, celui qui dit "Package de bibliothèques requises en JAR généré".
OriginalL'auteur Maaz
vous devez ajouter l'smtp.jar fichier, j'ai aussi coincé avec le même message d'erreur après quelques recherches sur google, et la vérification de certains anciens projets, j'ai trouvé que j'ai raté ce pot dans ma bibliothèque, j'ai ajouté ce pot à la bibliothèque et trouvé, problème résolu.
OriginalL'auteur Vishal Vijayan
J'ai eu le même message d'erreur, mise à jour le bocal de l'Oracle directement fixé.
OriginalL'auteur Massi
Pour ceux qui utilisent Gradle: vous pouvez obtenir tous les requis des Pots comme suit (1.5.5 est la version la plus récente):
OriginalL'auteur stefan.m
J'ai réussi à résoudre cette erreur, qui était dû à une mauvaise de la bibliothèque. J'ai essayé d'utiliser
javax.mail
jar téléchargé à partir de maven, qui s'est avéré être incomplète. J'ai donc cherché une fois de plus pourjavamail
et a obtenu un directement auprès de Oracle (cliquez sur Libération lien). Cette fois, c'est un fichier zip.OriginalL'auteur Jarekczek