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

Java Discussion :

[JavaMail] Exceptions à l'exécution


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut [JavaMail] Exceptions à l'exécution
    Bonjour les amis développeurs,

    J'ai un problème avec ce code (EnvoiMail.java):

    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
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Properties;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    import javax.mail.*;
    import javax.net.*;
    import javax.mail.MessagingException;
    import javax.mail.NoSuchProviderException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
     
    /**
     * Envoyer un email
     */
    public class EnvoiMail {
     
        private Session session = null;
        private Transport transport = null;
     
        /**
         * Fixer les propriétés
         */
        public void connect(String host, String user, String password) throws NoSuchProviderException, MessagingException {
            Properties properties = new Properties();
            properties.setProperty("mail.transport.protocol", "smtp");
            properties.setProperty("mail.smtp.host", host);
            //properties.setProperty("mail.smtp.port", "25");
            properties.setProperty("mail.smtp.auth", "true");
            properties.setProperty("mail.smtp.user", user);
            //properties.setProperty("mail.smtp.starttls.enable", "true");
            this.session = Session.getDefaultInstance(properties, null);
            this.transport = this.session.getTransport("smtp");
            this.transport.connect(host, user, password);
        }
     
        public void send(String from, String to, String subject, String body) throws MessagingException {
            MimeMessage message = new MimeMessage(this.session);
            message.setSubject(subject);
            message.setContent(body, "text/plain");
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setFrom(new InternetAddress(from));
            this.transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
            this.transport.close();
        }
        public static void main(String args[]) {
            System.out.println("Taper mail valide :");
            try {
                            mail=mail_to.readLine();
                    } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                    }
            System.out.println("Taper sujet :");
            try {
                            sujet=buffer_sujet.readLine();
                    } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                    }
            System.out.println("Taper un message :");
            try {
                            mes=buffer_corp.readLine();
                    } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                    }
            try {
                EnvoiMail email = new EnvoiMail();
                email.connect("localhost", "user", "mdp");
                email.send("user@mondomaine.com",mail, sujet, mes);
     
            } catch (MessagingException ex) {
                Logger.getLogger(EnvoiMail.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        //static BufferedReader host = new BufferedReader(new InputStreamReader(System.in));
        //static BufferedReader buffernom = new BufferedReader(new InputStreamReader(System.in));
        static BufferedReader buffer_corp = new BufferedReader(new InputStreamReader(System.in));
        static BufferedReader mail_from = new BufferedReader(new InputStreamReader(System.in));
        static BufferedReader mail_to = new BufferedReader(new InputStreamReader(System.in));
        static BufferedReader buffer_sujet = new BufferedReader(new InputStreamReader(System.in));
        static String mes;
        static String mail;
        static String sujet;
    }
    Je compile avec la commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -encoding ISO-8859-1 -g -cp java-mail-1.4.4.jar EnvoiMail.java
    La compilation passe, puis j'exécute:

    Résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur : impossible de trouver ou charger la classe principale EnvoiMail.class
    Pourtant la classe s'appelle EnvoiMail et le fichier source aussi. Quelqu'un aurait-il une explication naturelle à ce phénomène ?

    Téléchargement de JavaMail 1.4.4 : ici.

    Configuration: Ubuntu server 13.04 LTS.

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par défaut
    Bonjour,

    lorsque tu execute la commande java, il ne faut pas préciser le ".class".

    Ta commande doit donc être :

    Si tu n'es pas dans le répertoire ou se trouve le .class (ou les librairies externes) tu dois aussi préciser le CLASSPATH avec l'argument -cp

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Merci Carhiboux. Alors maintenant j'ai des erreurs plus graves :

    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
    Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingException
            at java.lang.Class.getDeclaredMethods0(Native Method)
            at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
            at java.lang.Class.getMethod0(Class.java:2764)
            at java.lang.Class.getMethod(Class.java:1653)
            at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
            at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
    Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            ... 6 more

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Apparemment les anciennes versions de JavaMail ont besoin de JavaBeans Activation Framework pour fonctionner, comme indiqué ici. Je vais donc essayer la version 1.5, qui est la plus récente. Mais je laisse encore le sujet ouvert. Merci.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    il faut surtout que dans ta ligne de commande tu ajoute java mail à l'exécution


    java -cp .:javamail.jar EnvoiMail

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Merci tchize_ ! Cela a bien résolu mon problème.

    Maintenant pour ma culture perso, peux-tu m'expliquer pourquoi fallait-il faire référence explicite à javax.mail.jar dans la ligne de commande ? Peut-on configurer l'environnement pour que l'on ait plus à le préciser ? Je me souviens que sous Windows, on pouvait créer une variable d'environnement CLASSPATH qui pointe sur tous les répertoires de classe. Mais c'était il y a longtemps. Et puis c'était même facultatif car le répertoire courant faisait automatiquement partie du CLASSPATH. J'ai essayé de faire la même chose mais en vain: set CLASSPATH, ajouter CLASSPATH dans etc/environment, dans etc/profile, mais rien à faire. Rien trouvé sur le net non plus .

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

Discussions similaires

  1. [Javamail] Exception incompréhensible
    Par GLDavid dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/07/2007, 18h01
  2. JavaMail exception NoClassDefFoundError
    Par filot dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 16/02/2007, 17h57
  3. [JavaMail] exception lors d'envoi d'un mail
    Par sovop dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 12/01/2007, 11h51
  4. [JavaMail] Exception lors de l'envoi d'un email en nombre
    Par yousfi.z dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 19/12/2006, 13h51
  5. Réponses: 2
    Dernier message: 18/07/2006, 18h53

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