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:
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
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>
Mon code source :
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>
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.
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);
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
Partager