IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

envoi d'un mail automatiquement


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut envoi d'un mail automatiquement
    Bonjour à tous,

    Je termine l'application que j'ai du réaliser pendant mon stage, et je dois régler les derniers détails. Devant faire un intranet, ayant coder les mots de passe en md5, je souhaiterais pouvoir faire une fonctionnalité permettant de récupérer un nouveau mot de passe en cas de perte. Je demande donc l'identifiant et l'adresse mail de l'utilisateur, et je souhaiterais lui envoyé un mail automatiquement avec ce nouveau mot de passe. Voila la classe que j'ai telecharger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Properties;
     
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    public class TestMailService extends HttpServlet {
     
        public void doPost(HttpServletRequest request,
                           HttpServletResponse response)
            throws IOException, ServletException
        {
            PrintWriter writer = response.getWriter();
            response.setContentType("text/html");
            writer.println("<html><head><title>Mail Example</title></head>");
            writer.println("<body bgcolor=\"white\">");
            writer.println("<h1>Mail Example</h1>");
     
            ///////// set this variable to be your SMTP host
     
           String mailHost = "your.smtp.server";
     
            ///////// set this variable to be your desired email recipient
     
            String to = "recipient@recip.recip";
     
            // these variables come from the mail form
     
            String from = request.getParameter("from");
            String subject = request.getParameter("subject");
            String body = request.getParameter("body");
     
            if ((from != null) && (to != null) && (subject != null)  && (body != null)) // we have mail to send
            {
     
            try {
     
     
                //Get system properties
                Properties props = System.getProperties();
     
                //Specify the desired SMTP server
                props.put("mail.smtp.host", mailHost);
     
                // create a new Session object
                Session session = Session.getInstance(props,null);
     
                // create a new MimeMessage object (using the Session created above)
                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from));
                message.setRecipients(Message.RecipientType.TO, new InternetAddress[] { new InternetAddress(to) });
                message.setSubject(subject);
                message.setContent(body, "text/plain");
     
                Transport.send(message);
     
                // it worked!
                writer.println("<b>Thank you.  Your message to " + to + " was successfully sent.</b>");
     
            } catch (Throwable t) {
     
                writer.println("<b>Unable to send message: <br><pre>");
                t.printStackTrace(writer);
                writer.println("</pre></b>");
            }
     
     
            }
            else
            {
                // no mail to send. print a blank mail form
                writer.println("<form action=\"/mine/mail\" method=\"POST\">");
                writer.println("<table border=\"0\">");
                writer.println("<tr><td>Message From: </td><td><input type=\"text\" name=\"from\"></td></tr>");
                writer.println("<tr><td>Subject: </td><td><input type=\"text\" name=\"subject\"></td></tr>");
                writer.println("<tr><td valign=\"top\">Message: </td><td><textarea name=\"body\" rows=\"10\" cols\"40\"></textarea></td></tr>");
                writer.println("<tr><td colspan=\"2\" align=\"center\"><input type=\"submit\" value=\"Send\"></td></tr>");
                writer.println("</table>");
                writer.println("</form>");
            }
     
     
            writer.println("</body>");
            writer.println("</html>");        
     
        }
     
        // doGet() just calls doPost()
     
        public void doGet(HttpServletRequest request,
                           HttpServletResponse response)
            throws IOException, ServletException
        {
            doPost(request, response);
        }
    }
    Et voila le code de ma servlet qui me servirait a envoyé ce mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Properties;
     
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import com.bi.projecttracking.dao.UserDO;
    import com.bi.projecttracking.services.AuthenticationService;
    import com.bi.projecttracking.services.ConfigurationService;
    import com.bi.projecttracking.services.LoggingService;
    import com.bi.projecttracking.services.Md5Service;
    import com.bi.projecttracking.services.TestMailService;
    import com.bi.projecttracking.tools.Tools;
     
    /**
     * Servlet implementation class for Servlet: NewPasswordServlet
     *
     */
     public class NewPasswordServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
        /* (non-Java-doc)
    	 * @see javax.servlet.http.HttpServlet#HttpServlet()
    	 */
    	public NewPasswordServlet() {
    		super();
    	}   		
     
    	/* (non-Java-doc)
    	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//instanciate all the required Services
    		AuthenticationService authenticationService = new AuthenticationService();
    		ConfigurationService configService = new ConfigurationService();
    		LoggingService loggingService = new LoggingService(configService.getProperties());
    		Md5Service md5Service = new Md5Service();
    		TestMailService testMailService = new TestMailService();
     
    		String login = request.getParameter("login");
    		String mail = request.getParameter("mail");
    		String jspForward = "";
     
    		//put all the attributes in an ArrayList
    		HashMap mandatoryFields = new HashMap();
    		mandatoryFields.put("login", login);
    		mandatoryFields.put("mail", mail);
     
    		//check that the form is correctly filled
    		ArrayList uncompleteFields = Tools.checkAttributes(mandatoryFields);
    		loggingService.log("uncompleteFields : " + uncompleteFields.size(), LoggingService.DEBUG);
     
    		//check that the login exist on the database
    		UserDO user = authenticationService.getUser(login);
    		Boolean userExist = user != null? true:false;
    		loggingService.log("userExist : " + userExist, LoggingService.DEBUG);
     
    		if (uncompleteFields != null && uncompleteFields.size() == 0 && userExist) {
     
    			// we generate a new password 
    			String newPass = "bi-"+login;
    			//we encrypted this new password
    			String newPassEncrypted = md5Service.encode(newPass);
    			// we edit the password of this user in the database
    			user.setPassword(newPassEncrypted);
    			//authenticationService.editUser(user);
    			jspForward = "/jsp/Login.jsp";
     
     
     
     
     
     
    			//set the inforrmations
    			request.setAttribute("sendPass",true);
    			request.setAttribute("mail",mail);
     
     
    		} else {
    			jspForward = "/jsp/ForgetPassword.jsp";
    			request.setAttribute("uncompleteFields",uncompleteFields);
    			request.setAttribute("userExist", userExist);
    			if (login!=null) {
    				request.setAttribute("login",login);
    			}
    			if (mail!=null) {
    				request.setAttribute("mail",mail);
    			}
    		}
    		response.setContentType("text/html");
    		RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(jspForward);
    		dispatcher.forward(request,response);
    	}  	  	    
    }
    Je ne parviens cependant pas a comprendre comment utiliser ce service testMailService dans ma servlet .

    Si quelqu'un a une idée, je le remerci d'avance !!

    A+

  2. #2
    Membre régulier Avatar de fedfil
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 91
    Points : 93
    Points
    93
    Par défaut
    Salut boy !

    Euh, c'est normal que tu ne puissent pas : tu ne peux pas appeler une servlet avec une autre !

    Par contre, l'exemple que tu as téléchargé te permet de comprendre comment utiliser javamail. Il te reste donc à l'adapter et à l'utiliser directement dans ta servlet.

    A+

  3. #3
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    Effectivement .

    J'essaie ca, merci

  4. #4
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    Juste une petite question a ce propos. Lorsque j'arrive a la ligne de code suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Message message = new MimeMessage(session);
    l'expection qui est dans le catch est levé. Je pense que ca viens de la ligne de la chaine mailHost, qui est actuellement la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String mailHost = "smtp.google.com";
    Comment savoir ce qu'il faut mettre dans cette chaine ?? J'ai fait quelques tutoriaux, mais je n'ai encore rien trouvé

  5. #5
    Membre régulier Avatar de fedfil
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 91
    Points : 93
    Points
    93
    Par défaut
    Pour envoyer un mail, il te faut un serveur smtp.
    C'est donc normal, le smtp "smtp.google.com" n'existe pas !

    Soit t'es en entreprise, il faut donc utiliser le ftp de ta boite. Sinon, il te faut en trouver un public.

    A+

  6. #6
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    Ok merci, je vais me renseigner

    A++

  7. #7
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    J'ai trouvé le serveur smtp mais toujours la même erreur .
    Tous les champs semblent etre remplis correctement.
    Quelqu'un verrait-til un erreur ? merci d'avance

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par jonnyboy
    J'ai trouvé le serveur smtp mais toujours la même erreur .
    Quelle erreur ????


    Sinon je te conseille vivement d'utiliser Jakarta Commons Email, une surcouche de JavaMail qui simplifie grandement l'envoi de mail...

    a++

  9. #9
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    L'exception levée dans le catch .

    je regarde ca, merci bien

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jonnyboy
    L'exception levée dans le catch .
    Throwable : C'est à dire n'importe quel exception possible et imaginable... c'est sur que ca va nous aider à trouver

    Plus sérieusement : le stacktrace de l'exception est très utile pour déterminer l'origine du problème...

    a++

  11. #11
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    je savais pas

    j'ai installer et essayer Jakarta Commons Email, avec l'exemple simple. J'ai
    essayer le code simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SimpleEmail email = new SimpleEmail();
    email.setHostName("mail.bli.com");
    email.addTo(mail);
    email.setFrom("ma boite");
    email.setSubject("Test message");
    email.setMsg("This is a simple test of commons-email");
    email.send();
    Mais cela m'affiche des erreurs (Unhandled exception type EmailException) dans eclipse.
    j'ai donc fait un bloc : try { } catch { } et j'ai oujours une exception levée dans le catch de type : java.lang.NoClassDefFoundError: javax/activation/DataSource.

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jonnyboy
    et j'ai oujours une exception levée dans le catch de type : java.lang.NoClassDefFoundError: javax/activation/DataSource.
    C'est déjà mieux (mais n'hésite pas à copier/coller le stacktrace complet de l'exception).

    La machine virtuelle ne trouve pas la classe javax.activation.DataSource, qui est requise par l'utilisation de JavaMail. Cette classe fait partie de JAF (JavaBeans Activation Framework), une librairie requise par JavaMail et disponible ici : http://java.sun.com/products/javabea...ads/index.html

    a++

  13. #13
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    merci !! je test ca, ca devrais etre bon cette fois !!

  14. #14
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    Arf, encore une erreur :

    Unable to send message: org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.b-i.com:25

    Mon serveur SMTP serait incorrect ??

  15. #15
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    L'erreur indique seulement l'échec de l'envoi de ton e-mail sur ton serveur mail (c'est-à-dire sur le port 25 de mail.b-i.com).
    Cette erreur ne veut pas forcément dire que l'adresse de ton serveur mail est incorrecte...
    Elle peut être dûe à autre chose.
    Par exemple, certains serveurs mail (les serveurs 'publiques' principalement) demandent de s'authentifier avant de pouvoir envoyer un e-mail.
    Ainsi, tu ne peux pas, par exemple, envoyer un e-mail via le serveur SMTP de gmail sans t'authentifier avec ton compte gmail au préalable.
    Généralement, les serveurs mails qui se trouvent au sein d'une entreprise ne demandent pas une tel authentification (puisqu'ils ne sont accessibles que depuis l'Intranet).

  16. #16
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    195
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 195
    Points : 98
    Points
    98
    Par défaut
    Désolé du retard

    En fait une l'application déployé sur le serveur de l'entreprise ca marche tres bien, les mails sont envoyés. Je ne sais pas pourquoi ca ne marche pas pour moi mais le tout est que ca fonctionne.

    Merci bien, A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2010] Envoi d'e-mail automatique
    Par swann7 dans le forum SharePoint
    Réponses: 6
    Dernier message: 18/08/2010, 13h08
  2. [MediaWiki] Envoi d'e-mails automatiques
    Par jadey dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/08/2009, 13h58
  3. envoie d'un mail automatique
    Par pythfred dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/06/2008, 16h10
  4. [Upload] Envoi d'un mail automatique...
    Par FredMines dans le forum Langage
    Réponses: 7
    Dernier message: 26/03/2006, 17h13
  5. Envoi d'un mail automatiquement
    Par batmat86 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/06/2004, 09h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo