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 - connexion au serveur SMTP


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut Javamail - connexion au serveur SMTP
    Bonjour tout le monde,

    J'ai à cette heure travaillé avec deux codes sources pour l'envoi de mails.
    Le premier

    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
     
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.util.*;
     
    public class SendMailTest {
        MyLogger logger;
        String serveur = "smtp.societe.com";
     
        public SendMailTest() {
        }
     
        public boolean doIt(String emailTo, String subject, String messageText, boolean debug) {
            boolean result = false;
            String emailFrom = "caddy@societe.com";
     
            try {
                System.out.println("Envoi d'un mail à \'"+emailTo+"\'...");
                System.out.println("Objet : "+subject);
                System.out.println("Intitulé : "+messageText);
                Properties props = System.getProperties();
                props.put("mail.smtp.host", serveur);
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", "25");
                props.put("mail.smtp.socketFactory.port", "25");
                //props.put("mail.smtp.starttls.enable","true");
                props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                props.put("mail.smtp.socketFactory.fallback", "false");
                Session session = Session.getDefaultInstance(props, new MyAuthenticator());
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(emailFrom));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
                message.setSubject(subject);
                message.setText(messageText);
                Transport.send(message);
                result = true;
                Fichier.getInstance().ecrireFichier(Fichier.fichierMail, "Mail envoyé");
                System.out.println("Mail envoyé");
            } catch (AddressException e) {
                Fichier.getInstance().ecrireFichier(Fichier.fichierMail, e.getMessage());
                e.printStackTrace();
            } catch (MessagingException e) {
                Fichier.getInstance().ecrireFichier(Fichier.fichierMail, e.getMessage());
                e.printStackTrace();
            } catch (Exception e) {
                Fichier.getInstance().ecrireFichier(Fichier.fichierMail, e.getMessage());
                e.printStackTrace();
            }
            return result;
        }
     
        public class MyAuthenticator extends javax.mail.Authenticator {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("caddy@societe.com", "mot_de_passe");
            }
        }
     
        public static void main(String[] args) {
            SendMailTest s = new SendMailTest();
            s.doIt("trucmuche@yahoo.fr", "Ceci est un test Javamail", "test Javamail",true);
        }
    }
    me permet de travailler uniquement avec le serveur smtp de gmail (serveur smtp.gmail.com, port 465). Quand j'essaie de configurer le code pour un autre serveur (les paramètres m'ont été communiqués par l'administrateur) tel que décrit dans le code, j'ai le message suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    javax.mail.SendFailedException: Sending failed;
      nested exception is: 
            javax.mail.MessagingException: Could not connect to SMTP host: smtp.societe.com, port: 25
            at javax.mail.Transport.send0(Transport.java:218)
            at javax.mail.Transport.send(Transport.java:80)
            at mailSender.SendMailTest.doIt(SendMailTest.java:50)
            at mailSender.SendMailTest.main(SendMailTest.java:76)
    Le deuxième

    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
     
    import org.openide.util.Exceptions;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.util.*;
     
    public class Mail {
     
        /** Type texte brut */
        static public final int TEXT = 0;
        /** Type text/html */
        static public final int HTML = 1;
        /** Adresse "no-reply" par défaut de l'entreprise */
        private static final String NOREPLY = "caddy@societe.com";
        /** Adresse du serveur SMTP de l'entreprise */
        private static final String SMTPHOST = "smtp.societe.com";
        private Properties props;
        private Session session;
        private MimeMessage mm;
        private int mimetype;
     
        private boolean noreply = true;
     
        public Mail() {
            //Par défaut en texte brut
            mimetype = TEXT;
     
            //Get system properties
            props = System.getProperties();
            //Setup mail server
            props.put("mail.smtp.host", SMTPHOST);
            //Get session
            session = Session.getDefaultInstance(props, null);
            //Define message
            mm = new MimeMessage(session);
        }
     
        public void setFrom(String expediteur) throws Exception {
            if (expediteur.trim().length() > 0) {
                mm.setFrom(new InternetAddress(expediteur));
                noreply = false;
            }
        }
     
        public void setTo(String destinataire) throws Exception {
            if (destinataire.trim().length() > 0) {
                mm.addRecipient(Message.RecipientType.TO, new InternetAddress(destinataire));
            }
        }
     
        public void setSujet(String sujet) throws Exception {
            mm.setSubject(sujet);
        }
     
        public void setMimeType(int mime) throws Exception {
            mimetype = mime;
        }
     
        public void setMessage(String message) throws Exception {
            if (mimetype == HTML) {
                mm.setContent(message, "text/html");
            } else {
                mm.setText(message);
            }
        }
     
        public void send() throws Exception {
            if (noreply) {
                setFrom(NOREPLY);
            }
            Transport.send(mm);
        }
     
        public static void main(String[] args) {
            try {
                Mail m = new Mail();
                m.setFrom("caddy@societe.com")
                m.setTo("trucmuche@yahoo.fr");
                m.setSujet("test");
                m.setMessage("Ceci est un test");
                m.send();
            } catch (Exception ex) {
                Exceptions.printStackTrace(ex);
            }
     
        }
    }
    me permet de travailler sans que je n'ai besoin de m'authentifier et me renvoie l'erreur suivante quand je travailler avec deux adresses différentes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    12 févr. 2011 11:55:12 org.openide.util.Exceptions printStackTrace
    SEVERE: null
    javax.mail.SendFailedException: Sending failed;
      nested exception is: 
            javax.mail.SendFailedException: Invalid Addresses;
      nested exception is: 
            javax.mail.SendFailedException: 553 sorry, that domain isn't allowed to be relayed thru this MTA (#5.7.1)
     
            at javax.mail.Transport.send0(Transport.java:218)
            at javax.mail.Transport.send(Transport.java:80)
            at mailSender.Mail.send(Mail.java:92)
            at mailSender.Mail.main(Mail.java:101)
    J'ai compris que je ne peux envoyer des messages qu'au sein du même serveur mais j'aimerais bien avoir une solution dans les 2 cas. Car je sèche.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    1) vous ne pouvez pas utiliser du ssl sur un port 25 en général, il y a (comme c'est le cas pour gmail) un port séparé pour le SSL

    2) votre serveur refuse de relayer le message. Soit le from, soit le to ne sont pas autorisé en raison de regles internes au serveur en question. Posez la question à votre administrateur à ce sujet, c'est son serveur qui vous refuse.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Merci pour votre réponse.
    En ce qui concerne les différents cas:
    Cas 2. j'utilise ce serveur pour l'envoi de mes mails en général (l'administrateur a mis à notre disposition un client - web - de messagerie) et jusqu'ici je n'ai pas eu de problèmes (quelle que soit l'adresse utilisée) en envoyant des mails via ce client.
    Cas 1. quelle serait la solution dans le code pour résoudre ce problème?

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    c'est probablement alors votre machine meme qui est refusée. La messagerie web n'a rien à voir avec le protocol smtp. Ce n'est pas parce que vous avez accès au webmail, que vous avez accès au serveur smtp. Avant de coder votre client, commencez par installer un client (type thunderbird) et configurez le pour qu'il soit capable d'envoyer des emails via ce serveur smtp. ensuite, quand vous avez trouvé la bonne config, transcrivez là en java (serveur, port, protocole ssl/tls, méthode d'authentification, etc).
    Pour le SSL, comme dit, il doit y avoir un port dédié, contacter votre administrateur.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Merci. Je vais suivre vos instructions et essayer de trouver une solution.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    J'ai bien suivi vos conseils : j'ai contacté l'administrateur du serveur de messagerie. Il m'a communiqué les différents paramètres qui m'ont servi lors de la configuration de mon Thunderbird, pas à pas (Mode de sécurité de la connexion par exemple, sur lequel j'avais planté). Une fois que tu as marché, je les ai appliqués dans mon code (le 1er) et ç'a donné quelque chose comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                String serveur = "mail.societe.com";
                Properties props = System.getProperties();
                props.put("mail.smtp.host", serveur);
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.port", "25");
                props.put("mail.smtp.socketFactory.port", "25");
                props.put("mail.smtp.starttls.enable","false");
                Session session = Session.getDefaultInstance(props, new MyAuthenticator());
    Où MyAuthetificator est décrit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public class MyAuthenticator extends javax.mail.Authenticator {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("caddy@societe.com", "mot_de_passe");
            }
        }
    Je tiens à préciser que le 1er serveur avec lequel je travaillais ne m'autorisait pas de 'sortir' pour l'envoi de mails, comme me l'a précisé l'admin. J'ai donc travaillé avec le 2ème (qu'il héberge aussi pour nous). Pour le 1er, il m'a dit qu'il a besoin d'enregistrer l'adresse IP par laquelle les mails 'sortiront' afin que ce soit possible.

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

Discussions similaires

  1. [WD19] Problème de connexion à un serveur SMTP
    Par wd_newbie dans le forum WinDev
    Réponses: 3
    Dernier message: 28/11/2014, 14h05
  2. [javamail] connection au serveur smtp impossible!
    Par cartman97 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 09/06/2010, 23h39
  3. [JavaMail] erreur de connexion au serveur SMTP
    Par herguem dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 01/08/2009, 10h41
  4. Problème de connexion à un serveur SMTP MS Exchange
    Par GillesN dans le forum Réseau
    Réponses: 0
    Dernier message: 24/02/2009, 19h13
  5. [C++] Probleme de connexion socket client à mon serveur smtp
    Par matthieu5978 dans le forum Développement
    Réponses: 2
    Dernier message: 04/12/2005, 08h19

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