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 :

Echec d'envoi d'un mail à partir de la servlet


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Echec d'envoi d'un mail à partir de la servlet
    salut tout le monde,
    j'ai dans ma page jsp un formulaire à remplir, les données remplies sont envoyées à une servlet pour les enregistrer dans la base et générer un fichier pdf qui contient ces données.Puis ce fichier est envoyé comme pièce jointe dans un mail.
    Le problème c'est que le mail n'est pas envoyé par cette servlet, cependant la methode que j'utilise fonctionne très bien et envoie correctement le mail avec le fichier si je fait "run as java application" dans la class mère de la methode.
    Le plus étonnant c'est qu'il n'y a pas d'erreurs générés lors de l'envoi avec la servlet.
    j'espère que je suis clair.

  2. #2
    Membre éclairé Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Points : 882
    Points
    882
    Par défaut
    As-tu plus d'élements à nous fournir ?

    Quelle bibliothéque tu utilises ? JavaMail ? Regarde s'il y a pas une option de debug verbeuse dans ta bibliothéque. Dans les logs du serveur, il doit y avoir une trace, car l'API génére une exception si ça part pas.

    Maintenant, les paramétres du mail... Sont-ils bon (smtp/pop, user name, password) ?

    Je sais même pas si par hazard, ce que tu appels
    "run as java application"
    ne serai pas l'execution de la main avec des paramètres qui fonctionent, qui ne sont pas dans le servlet d'envoi du mail.

    As-tu plus d'élements à nous fournir ?

  3. #3
    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
    Points : 3 938
    Points
    3 938
    Par défaut
    Visiblement c un pb d'environnement, où as tu localisé ton fichier pdf généré?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    salut et merci pour vos interventions,

    concernant l'API j'utilise JavaMail (mail.jar et activation-1.1.jar).
    pour les paramètre j'ai celui du smtp (mailserver) c tout ,j'ai pas username ou password et ce paramètre(maiserver) est le même dans main de la class java ou dans la servlet d'envoi.En fait si le paramètre smtp est faut , une exception va se lancer qui n'etait pas le cas.
    le fichier pdf est généré en local, de plus j'ai tester avec la methode main de la class java l'envoi du fichier générer par la servlet en introduisant son chemin absolut(celui utilisé par la servlet pour l'envoi) et tout passe bien; le fichier est envoyé. Mais j'arrive pas à comprendre pourquoi la servlet ne l'envoi pas ????

  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
    Points : 3 938
    Points
    3 938
    Par défaut
    Où as tu déposé tes 2 librairies de mail? dans webapp/WEB-INF/lib ?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    bien sûr dans webapp/WEB-INF/lib ; c'est une application web.

  7. #7
    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
    Points : 3 938
    Points
    3 938
    Par défaut
    Et tes logs applicatifs ne te disent rien sur l'erreur d'envoi?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    c quoi les logs applicatifs?
    si tu veux dire les fichiers logs du serveur, j'ai vu et il n'y a rien dedans !

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Points : 399
    Points
    399
    Par défaut
    Bonjour,

    ne serait-il pas plus simple que tu nous publies le code de ta servlet qui se charge de l'envoi de mails?

    Cordialement,
    Sébastien

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    voila la partie de servlet qui se se charge de l'envoi du mail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MailClient sender = new MailClient();
    			String to = "destination@yahoo.fr";
    			String msg = "Bonjour, vous avez reçu un mail !";
    			attachements[0]=getServletContext().getRealPath("rapportJRXML/report.pdf");
    			System.out.println("file path = "+attachements[0]);
    			boolean sent = sender.sendMail(mailserver,email,to, "Formulair client", msg, attachements);
    			System.out.println("the file is sent : "+sent);
    et la valeur de sent = true, mais le mail n'est pas envoyé ?

    et pour la méthode send mail j'ai suivi le tutorial suivant http://www.osix.net/modules/article/?id=39
    Pas de problème avec cette méthode comme j'ai déjàs dis !

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Points : 399
    Points
    399
    Par défaut
    Bonsoir,

    en fait, je me demande si tu ne subis pas un conflit de librairies entre celles de ton conteneur et celles que tu as placées dans ton dossier WEB-INF/lib ...

    Selon moi, ça n'est pas ainsi qu'il faut s'y prendre pour obtenir une instance de javax.mail.Session lorsqu'on travaille en JEE. Il faut normalement que le conteneur te mette cet objet à disposition. En clair, dans la classe MailClient, je remplacerai la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Get a mail session
    Session session = Session.getDefaultInstance(props, null);
    par un lookup JNDI:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    InitialContext ic = new InitialContext();
    Context rootContext = ic.lookup("java:comp/env");
    Session session = (Session)rootContext.lookup("mail/nomBindingMail");
    Ceci présuppose que tu aies configuré ton conteneur pour te fournir, au déploiement, une ressource de type javax.mail.Session que tu relierais à ton nom JNDI "mail/nomBindingMail". Egalement, tu déclarerais dans ton descripteur de déploiement la dépendance sur cette ressource.

    Cordialement,
    Sébastien

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    merci Sébastien pour ton suivi,
    j'ai essayé d'appliquer votre solution en passant par les étapes suivantes:
    j'ai ajouter ça dans la méthode sendMail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    InitialContext ic = new InitialContext();
            Context rootContext = (Context) ic.lookup("java:comp/env");
            Session session = (Session)rootContext.lookup("mail/nomBindingMail");
    puis j'ai ajouté ces lignes dans server.xml le fichier de configuration de tomcat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Resource name="mail/nomBindingMail" auth="Container" type="javax.mail.Session"
    		mail.smtp.host="smtp.topnet.tn"
    	/>
    et dans le Web.xml j'ai ajoter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <resource-ref>
    	<description>Definition du datasource</description>
    	<res-ref-name>mail/nomBindingMail</res-ref-name>
    	<res-type>javax.mail.Session</res-type>
    	<res-auth>Container</res-auth>
      </resource-ref>
    mais pas de nouvelle et en plus il y a une exception lancé:
    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
    java.lang.ClassNotFoundException: javax.mail.Authenticator
    	at java.net.URLClassLoader$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    	at org.apache.naming.factory.MailSessionFactory.getObjectInstance(MailSessionFactory.java:105)
    	at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:140)
    	at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    	at fa.util.MailClient.sendMail(MailClient.java:28)
    alors que la class javax.mail.Authenticator se trouve dans mail.jar qui est placé dans le dossier lib.
    je me demande si j'ai bien compris ce que tu veux m'expliquer par ce que c la première fois que j'utilise ce genre des choses?

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Points : 399
    Points
    399
    Par défaut
    Bonjour,

    ta stacktrace et ton fichier de configuration me laisse supposer que Tomcat est le conteneur utilisé.
    En se référant à la documentation de Tomcat concernant la configuration des ressources JNDI JavaMail , procédons à la vérification suivante:

    - Dans ton répertoire lib de Tomcat, est-ce que les jar de JavaMail et Activation sont présents? En effet, comme le conteneur doit fournir le service, il faut que les classes lui soient accessibles.
    - Est-ce que les librairies JavaMail et Activation sont dans ton dossier WEB-INF/lib? si c'est le cas, je te conseille de les retirer ( puisque les classes JavaMail seront exposées par le ClassLoader du conteneur ).

    L'idée, c'est de s'approcher du modèle qui suit, dans l'idée d'assembler une sorte de puzzle:
    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
     
    +---------------------------------------------+
    |             Ton Application Web             |
    |                                             |
    | mail/session   jdbc/datasource              |
    |      ___      |      ___      |             |
    |      \ /      |      \ /      |             |
    +------+ +------+------+ +------+-...---------+
           ___             ___
           \ /             \ / 
    +------+ +-------------+ +---------...--------+
    |   service         service                   |
    |  JavaMail        DataSource                 |
    |                                             |
    |             Conteneur Servlet JEE           |
    +---------------------------------------------+
    Cordialement,
    Sébastien

  14. #14
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    bonjour,
    J'ai compris maintenant pourquoi il lance cette exception de ClassNotfoundException, donc j'ai supprimer les JavaMail et Activation jar de WEB-INF/lib et je les ai ajoutés au lib de tomcat mais cette fois il lance l'exception suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
      nested exception is:
    	java.net.ConnectException: Connection refused: connect
    	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
    	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
    	at javax.mail.Service.connect(Service.java:291)
    	at javax.mail.Service.connect(Service.java:172)
    	at javax.mail.Service.connect(Service.java:121)
    	at javax.mail.Transport.send0(Transport.java:190)
    	at javax.mail.Transport.send(Transport.java:120)
    	at fa.util.MailClient.sendMail(MailClient.java:55)
    j'ai cherché sur internet et j'ai trouvé que peut être c l'antivirus (j'ai avira) qui bloque le port 25 mais j'ai changé le port à l'aide de
    dans server.xml, et j'ai starter tomcat mais il affiche la même exception;

  15. #15
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Points : 399
    Points
    399
    Par défaut
    Bonjour,

    déjà, je suis heureux que tu aies compris le principe ( et la cause du problème ).
    Maintenant, tu fais face à un problème: le service de mail tente de se connecter sur ton poste ( d'où l'adresse "localhost" ). Plus haut, ta configuration indiquait: mail.smtp.host="smtp.topnet.tn".
    Vérifie le paramètre de configuration de ta resource afin d'avoir la bonne destination.

    Tu touches au but.

    Cordialement,
    Sébastien

  16. #16
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    salut

    Merci Sébastien pour ton suivi jusqu'au là, c'est gentil de ta part, mais j'ai résolu le problème en utilisant une autre manière. j'utilise une servlet qui se charge lors de lancement de l'application et j'ai mis un attribut comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mailClient = new MailSender();
    		  getServletContext().setAttribute("mailClient",mailClient);
    puis j'ai recuperé cet attribut à l'aide de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MailClient mailclient = (MailClient) getServletContext().getAttribute ("mailClient");
    en concevant la session normale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Session session = Session.getDefaultInstance(props, null);
    puis j'ai envoyé le mail et ça marche !

    salut

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

Discussions similaires

  1. [PHP 5.2] Echec à l'envoi d'e-mail
    Par agnaou dans le forum Langage
    Réponses: 5
    Dernier message: 04/05/2009, 15h01
  2. Envoi fichier par mail à partir d'Access
    Par Adrien972 dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/03/2009, 23h01
  3. Envoi d'un mail à partir d'access
    Par grommerch dans le forum VBA Access
    Réponses: 10
    Dernier message: 26/08/2008, 10h31
  4. Réponses: 1
    Dernier message: 02/01/2007, 18h48
  5. envoi automatisé de mails à partir d'une base postgresql
    Par youn608 dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 15/02/2005, 09h06

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