Envoyer à Email.Java
package helper;
//Mail.Java - smtp sending starttls (ssl) authentication enabled
//1.Open a new Java class in netbeans (default package of the project) and name it as "Mail.Java"
//2.Copy paste the entire code below and save it.
//3.Right click on the file name in the left side panel and click "compile" then click "Run"
import javax.mail.*;
import javax.mail.internet.*;
import Java.util.*;
public class sendToEmail
{
String d_email = "[email protected]",
d_password = "mysamplepassword",
d_Host = "smtp.gmail.com",
d_port = "465",
//m_to = "[email protected]",
m_subject = "trial",
m_text = "Hey, this is the testing email.";
public sendToEmail(String strEmailAddress)
{
Properties props = new Properties();
props.put("mail.smtp.user", d_email);
props.put("mail.smtp.Host", d_Host);
props.put("mail.smtp.port", d_port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true");
//props.put("mail.smtp.debug", "true");
props.put("mail.smtp.socketFactory.port", d_port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SecurityManager security = System.getSecurityManager();
try
{
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
//session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
msg.setText(m_text);
msg.setSubject(m_subject);
msg.setFrom(new InternetAddress(d_email));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(strEmailAddress));
Transport.send(msg);
}
catch (Exception mex)
{
mex.printStackTrace();
}
}
public class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(d_email, d_password);
}
}
}
partie de mon controller.Java
/* Send to Email will run properly soon */
sendToEmail email = new sendToEmail(strEmailAddress);
Lorsque j'exécute mon application Web, j'ai reçu ce message d'erreur disant:
Rapport d'exception de type
message
description Le serveur a rencontré une erreur interne () qui l'a empêché de répondre à cette demande.
exception javax.servlet.ServletException: l'exécution du servlet a levé une exception
cause racine Java.lang.NoClassDefFoundError: javax/mail/Authenticator controller.RegisterTenantController.doPost (RegisterTenantController.Java:108) javax.servlet.http.HttpServlet.service (HttpServlet.Java:709) javax.servlet.Service.ttp (HttpServlet.Java:802)
Que vais-je faire maintenant? Quelqu'un peut-il m'aider à réussir cette application Web?
Vous devez ajouter deux jars dans le répertoire WEB-INF/lib ou votre webapp (ou le répertoire lib du serveur):
Bien qu'il soit possible que cela soit dû à un fichier jar manquant dans votre chemin de classe, ce n'est peut-être pas le cas.
Il est important de garder deux ou trois exceptions différentes dans notre tête dans ce cas:
Java.lang.ClassNotFoundException
Cette exception indique que la classe n'a pas été trouvée sur le chemin de classe. Cela indique que nous essayions de charger la définition de classe et que la classe n'existait pas sur le chemin de classe.
Java.lang.NoClassDefFoundError
Cette exception indique que la machine virtuelle Java a recherché dans sa structure de données de définition de classe interne la définition d'une classe et ne l'a pas trouvée. C'est différent de dire qu'il n'a pas pu être chargé à partir du chemin de classe. Habituellement, cela indique que nous avons précédemment tenté de charger une classe à partir du chemin de classe, mais cela a échoué pour une raison quelconque - maintenant nous essayons à nouveau, mais nous n'allons même pas essayer de la charger, car nous avons échoué à la charger plus tôt. L'échec antérieur peut être un ClassNotFoundException
ou un ExceptionInInitializerError
(indiquant une panne dans le bloc d'initialisation statique) ou un certain nombre d'autres problèmes. Le fait est qu'un NoClassDefFoundError
n'est pas nécessairement un problème de chemin de classe.
Je regarderais la source de javax.mail.Authenticator
, Et verrais ce qu'il fait dans son initialiseur statique. (Regardez l'initialisation des variables statiques et le bloc statique, s'il y en a un.) Si vous n'obtenez pas un ClassNotFoundException
avant le NoClassDefFoundError
, vous êtes presque assuré qu'il s'agit d'une initialisation statique problème.
J'ai vu des erreurs similaires assez fréquemment lorsque le fichier hosts définit de manière incorrecte l'adresse localhost et que le bloc d'initialisation statique s'appuie sur InetAddress.getLocalHost()
. 127.0.0.1 devrait pointer vers "localhost" (et probablement aussi localhost.localdomain). Il ne doit PAS pointer vers le nom d'hôte réel de la machine (bien que, pour une raison quelconque, de nombreux anciens installateurs RedHat Linux aimaient le définir incorrectement).
Ajoutez des éléments suivants à votre dépendance Maven
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
J'ai exécuté une fois dans cette situation et j'avais les dépendances dans classpath. La solution consistait à inclure les bibliothèques javax.mail et javax.activation dans le dossier lib du conteneur (par exemple Tomcat). Avec maven, vous les définirez sur la portée fournie et cela devrait fonctionner. Vous aurez partagé des bibliothèques de messagerie dans classpath pour tous les projets.
Source utile: http://haveacafe.wordpress.com/2008/09/26/113/
Quand j'ai eu ce problème, j'avais inclus le mail-api.jar
dans mon fichier pom maven. C'est la spécification API uniquement . Le correctif consiste à remplacer ceci:
<!-- DO NOT USE - it's just the API, not an implementation -->
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
avec l'implémentation de référence de cette api:
<groupId>com.Sun.mail</groupId>
<artifactId>javax.mail</artifactId>
Je sais que Sun contient le nom du package, mais c'est la dernière version. J'ai appris cela de https://stackoverflow.com/a/28935760/1128668
Même moi, je faisais face à une erreur similaire. Essayez ci-dessous 2 étapes (dont la première a déjà été recommandée ici) - 1. Ajoutez les dépendances à votre pom.xml
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
jar
dans votre .m2\repository\javax\<folder>\<version>\
répertoire.