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

API standards et tierces Java Discussion :

[JavaMail] Problème avec le serveur de messagerie demandant une authentification


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut [JavaMail] Problème avec le serveur de messagerie demandant une authentification
    Bonjour,


    Je développe une application web en java (utilisation de struts)
    et je souhaite envoyer un mail en automatique en utilisant
    un serveur messagerie qui nécessite une authentification



    J'obtiens l'erreur suivante.

    javax.servlet.ServletException
    org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


    cause mère

    javax.mail.AuthenticationFailedException
    javax.mail.Service.connect(Service.java:319)
    javax.mail.Service.connect(Service.java:169)
    javax.mail.Service.connect(Service.java:118)
    javax.mail.Transport.send0(Transport.java:188)
    javax.mail.Transport.send(Transport.java:118)
    dcmat.commit.ValidDemTraitant.execute(ValidDemTraitant.java:101)
    org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
    org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
    org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)



    J'utilise un serveur Apache Tomcat 5.5

    dans le répertoire apache/common/lib, j'ai les librairies suivantes : activation.jar, mail.jar, mailapi.jar


    Le fichier appli.xml sous Tomcat 5.5\conf\Catalina\localhost est le suivant:

    Code xml : 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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!-- <Context path="/commit1" reloadable="true" >     -->
     
     
             <Context docBase="${catalina.home}/webapps/commit1" privileged="true"
             antiResourceLocking="false" antiJARLocking="false">
            <Valve className="org.apache.catalina.valves.AccessLogValve"
                     directory="logs"  prefix="commit1_log." suffix=".txt"
                     pattern="combined" resolveHosts="false"/>
     
     
                 <Resource
                     name="jdbc/commit1" type="javax.sql.DataSource"
                     driverClassName="com.mysql.jdbc.Driver"
                     url="jdbc:mysql://dev-tst:3306/Commit?autoReconnect=true"
                    auth="Container"
                    username="xxx"
                     password="xxxx"
                     maxActive="20" maxIdle="8" maxWait="10000" minActive="8" removeAbandoned="true" removeAbandonedTimeout="5000"
                       />
                  <Resource name="mail/Session"
                      type="javax.mail.Session"
                      auth="Container"
                      mail.smtp.host="160.133.xxx.xx"
                      mail.smtp.port="25"
                      mail.smtp.auth="true"
                      mail.smtp.user="xxxx"
                      mail.smtp.password="xxxx"  />
     
    </Context>
    Dans le fichier web.xml de mon appli :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <resource-ref>
         <description> mail </description>
         <res-ref-name>mail/Session</res-ref-name>
         <res-type>javax.mail.Session</res-type>
         <res-auth>Container</res-auth>
     
    </resource-ref>
    Mon code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     Context initialCtx = new InitialContext();
     Context localCtx = (Context) initialCtx.lookup("java:comp/env");
     javax.mail.Session session = ( javax.mail.Session )localCtx.lookup("mail/Session");
     
     Message msg = new MimeMessage(session);
     msg.setFrom(new InternetAddress("traitant@xxxx.fr"));
     InternetAddress toAdress = new InternetAddress("xxxxr@xxx.fr");
     msg.addRecipient(Message.RecipientType.TO, toAdress);
     msg.setSubject("Demande  " + request.getParameter("cidem") + " livrée ");
     msg.setContent("La demande " + request.getParameter("cidem") + " a été livrée le : "  +  request.getParameter("dtlivre") , "text/plain");
     Transport.send(msg);
    J'ai testé mon programme sur un serveur de messagerie qui ne demande pas d'authentification et là tout fonctionne je n'ai pas d'erreur.

    Je n'arrive pas à situer l'erreur est-ce que cela vient du serveur de messagerie demandant l'authentification ou de mon appli ?

    je ne gère pas les serveurs de messagerie c'est le domaine de l'administrateur réseau
    je lui ai transmis mon problème mais pour lui il n'y a pas de problème côté serveur, il a autorisé l'adresse IP de mon serveur sur son serveur de messagerie, j'utilise bien les bons user et le password.

    Je ne sais plus où chercher.

    Merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    Bonjour,

    Tout d'abord pense à utiliser les balises "[code]" quand tu post un message.
    Pour ton problème avec javamail, j'ai cru remarqué que tu n'instanciait pas d'Authenticator je pense que ton problème vient de là. Personnellement je fais comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Properties props = System.getProperties();
    props.setProperty("mail.smtp.host", host);
    props.setProperty("mail.smtp.port", port);
     
     
    props.setProperty("mail.smtp.auth", "true");
     
    Session session = Session.getDefaultInstance(props,
    		new Authenticator() {
    			public PasswordAuthentication getPasswordAuthentication() {
    				return new PasswordAuthentication(user, password);
    			}
    		});
    à toi de l'adapter à ton code

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Par défaut
    Bonjour,

    Merci pour ta réponse,

    Qu'est ce que tu appelles les balises [code] (je débute ) ?

    Pour l'authentification comme j'utilise Apache Tomcat, je me suis inspirée de la doc Apache Tomcat et des ressources JNDI pour mon appli et ce que je comprends c'est que tous mes paramètres d'authentification sont décrits au niveau des fichiers Context et web.xml de mon appli et je ne devrais pas avoir en principe besoin d'Authenticator.
    Si je rajoute authenticator je vais me retouver avec 2 sessions javamail car j'ai déjà une session déclarée par :
    javax.mail.Session session = ( javax.mail.Session )localCtx.lookup("mail/Session");
    Est-ce que je me trompe ?

    Merci d'avance pour ta réponse

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Voila une methode qui marche proprement, il suffit de lui passer les bons paramètres et elle t'enverra ton mail avec eventuellement un fichier attaché:
    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
    public void envoiMail(String emailto,String emailfrom,String replyTo,String fileToSend)
    	  {
    			//Récupére les propriétés du systéme
    			Properties props = System.getProperties();
     
    			//Spécification du serveur mail
    			props.put("mail.smtp.host",smtpServer);
    			props.put("mail.smtp.auth","false");
     
    			//Récupère la session
    			Session sessionMail = Session.getInstance(props,null);
     
    			//Définition du message
    			MimeMessage message = new MimeMessage(sessionMail);
     
    			//Afficher Mode Debug
    			sessionMail.setDebug(true);
    			try{
    			//Set date information
    			 message.setSentDate(new Date());		
    			 message.setFrom(new InternetAddress(emailfrom));
    			 //Spécification du destinataire
    			 message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailto));
    			 //Spécification du replyto
    			 InternetAddress[] adressesReply={new InternetAddress(replyTo)};
    			 message.setReplyTo(adressesReply);
    			 //Sujet du message
    			 message.setSubject(getSubject());
    			 //Texte du message
    			 MimeBodyPart mbpText = new MimeBodyPart();
    			 mbpText.setText(getBodyMsg());
    			 //Attachement du fichier
    			 MimeBodyPart mbpFile = new MimeBodyPart();
                 // attach the file to the Multipart
    			 File file=new File(fileToSend);
                 FileDataSource fds = new FileDataSource(fileToSend);
                 mbpFile.setDataHandler(new DataHandler(fds));
                 mbpFile.setFileName(file.getName());
                 //create the Multipart and its parts to it
                 Multipart mp = new MimeMultipart();
                 mp.addBodyPart(mbpText);
                 mp.addBodyPart(mbpFile);
                 message.setContent(mp);
    			 //Envoie le message avec un smtp authentifié
    			 message.saveChanges(); // implicit with send()
    			 //message.ATTACHMENT
    			 Transport transport = sessionMail.getTransport("smtp");
    			 transport.connect(smtpServer,"","");
    			 transport.sendMessage(message, message.getAllRecipients());
    			 transport.close();
     
    			}catch(MessagingException e){
    			 e.printStackTrace();
    			} 
    	  }

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Pourquoi les balises codes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tout d'abord pense à utiliser les balises "\[code\]" quand tu post un message.
    Ca peut peut être m'aider car chez moi ca marche bien sauf que les mails arrivent en indésirable ou spam .

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Par défaut
    En fait je parlais des balises que Sinok à rajouter sur le premier message pour la lisibilité du code ... (le petit # a coté de la balise de quote)

    Pour ton problème de session, il doit y avoir un moyen de la récupérer (comme tu fais déjà chant78) et d'y ajouter un Authenticator (javax.mail.Authenticator) (mais j'ai pas la javadoc sous les yeux là, je regarderais plus tard).

    Bonne continuation

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2008, 01h14
  2. problème avec mon serveur apache
    Par amazircool dans le forum Apache
    Réponses: 2
    Dernier message: 22/05/2007, 14h57
  3. Problème avec un serveur lié
    Par mikedavem dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/03/2007, 11h06
  4. Quelques problèmes avec SQL SERVEUR (LIKE et caractères)
    Par poussinphp dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/09/2005, 09h43
  5. [javamail] Problème avec Hotmail ?
    Par Cyborg289 dans le forum API standards et tierces
    Réponses: 58
    Dernier message: 14/09/2005, 14h51

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