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