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

API standards et tierces Java Discussion :

[JavaMail] problème d'envoi de courrier avec SMTP


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Points : 11
    Points
    11
    Par défaut [JavaMail] problème d'envoi de courrier avec SMTP
    Bonjour à tous,

    j'utilise actuellement JAVAMAIL pour envoyer mes mails, mais j'ai une erreur à l'envoi. Voici le code que j'utilise :

    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
     
    public void postMail(String to, String subject,	String message , String from) throws MessagingException	{
    		boolean debug = true;
     
    		//On renseigne les propriétés SMTP
    		Properties props = new Properties();
    		props.put("mail.smtp.host", config.getSmtpHostName());
    		if (config.getSmtpAuthUser() != "") {
    			props.put("mail.smtp.auth", "true");
    		} else {
    		props.put("mail.smtp.auth", "false");}
    		//props.put("mail.smtp.auth", "true");
    		Authenticator auth = new SMTPAuthenticator();
    		Session session = Session.getDefaultInstance(props, auth);
     
    		session.setDebug(debug);
     
    		//Création du mail
    		Message msg = new MimeMessage(session);
     
    		//Adresse source et adresse destination...
    		InternetAddress addressFrom = new InternetAddress(from);
    		msg.setFrom(addressFrom);
     
    		InternetAddress addressTo = new InternetAddress(to);
    		msg.setRecipient(Message.RecipientType.TO, addressTo);
     
    		//On règle le sujet et le corps du message
    		msg.setSubject(subject);
    		msg.setContent(message, "text/html");
    		Transport.send(msg);
    	}
    Et voici l'erreur que je reçois :

    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
     
    DEBUG SMTP Found extension "PIPELINING", arg ""
    DEBUG SMTP Found extension "SIZE", arg "10485760"
    DEBUG SMTP Found extension "AUTH", arg "PLAIN LOGIN"
    DEBUG SMTP Found extension "AUTH=PLAIN", arg "LOGIN"
    DEBUG SMTP Found extension "8BITMIME", arg ""
    DEBUG SMTP: use8bit false
    DEBUG SMTP SENT: MAIL FROM:<mymail@hotmail.com>
    DEBUG SMTP RCVD: 250 Ok
     
    DEBUG SMTP SENT: RCPT TO:<mymail@hotmail.com>
    DEBUG SMTP RCVD: 554 <mymail@hotmail.com>: Recipient address rejected: Missing Authentication
     
    Invalid Addresses
      <a href="mailto:mymail@hotmail.com">mymail@hotmail.com</a>
    DEBUG SMTPTransport: Sending failed because of invalid destination addresses
    DEBUG SMTP SENT: RSET
    DEBUG SMTP RCVD: 250 Ok
     
    DEBUG SMTP SENT: QUIT
    Pourtant mymail@hotmail.com est une adresse valide, j'ai essayé avec d'autres et le problème reste le même. Enfin, concernant le Missing Authentication il ne devrait pas y avoir de probleme puisque mon provider (Orange) n'en demande pas.

    Si vous avez la moindre piste ou suggestion je suis grandement preneur, j'ai fouillé sur le forum mais je n'ai rien trouvé pour l'instant

    Merci d'avance!
    Gilles

  2. #2
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Tu es sûr que orange accepte une adresse from en hotmail.com ? Tu veux pas essayer avec en from ton adresse orange ? (oui, je sais, le message d'erreur dit adresse de destination, mais je préférerais éliminer cette possibilité)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par chtig Voir le message
    Tu es sûr que orange accepte une adresse from en hotmail.com ? Tu veux pas essayer avec en from ton adresse orange ? (oui, je sais, le message d'erreur dit adresse de destination, mais je préférerais éliminer cette possibilité)
    Effectivement, mais j'ai déjà essayé avec plusieurs autres adresses valides et non hotmail en FROM (et en TO d'ailleurs), et le résultat est le même...

    Tu as une idée?

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 851
    Points
    22 851
    Billets dans le blog
    51
    Par défaut
    N'y a-t'il pas une erreur dans la chaine de texte contenant l'addresse (c'est du HTML) :

    Invalid Addresses
    <a href="mailto:mymail@hotmail.com">mymail@hotmail.com</a>
    Ou alors cette chaine s'est trouvee transformee dans le message quand j'ai remplace QUOTE par CODE.

    Sinon, la plupart des fournisseur ne prennent pas en charge le relay de courriers qui proviennent de l'exterieur et demandent effectivement a s'authentifier lorsque tu te connectes sur le serveur de courrier. Tu te connectes sur leur serveur SMTP via ta connection Orange ? Ou via l'exterieur (ex : de la fac ou de ton boulot) ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 182
    Points : 159
    Points
    159
    Par défaut
    Il y a peu de fournisseurs avec lesquels on peut utiliser simplement le protocole. généralement il y a une demande d'authenfication.
    Voici le code que j'utilise :

    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
    String smtpHost = "smtp......";
            String from = "toto@toto.com";
            String to = "tata@tata.com";
            String username = "?????????";
            String password = "??????????";
     
            Properties props = new Properties();
            props.put("mail.smtp.host", smtpHost);
            props.put("mail.smtp.auth", "true");
     
            Session session = Session.getDefaultInstance(props,null);
            session.setDebug(true);
            try{
            MimeMessage message = new MimeMessage(session); 
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("Hello");
            message.setText("Hello World");
     
     
            Transport tr = session.getTransport("smtp");
            tr.connect(smtpHost, username, password);
            message.saveChanges();
     
            tr.sendMessage(message,message.getAllRecipients());
            tr.close();
     
            }
    Et le mail est envoyé

    Enfin ca c'est la théorie car je ne le recois jamais et il n'y aucun code d'erreur

    Si vous avez une idée ?
    Peutêtre qu'à plusieurs on va y arriver

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Je reviens sur ce topic, j'ai à nouveau un peu de temps à m'y consacrer Merci pour les réponses!

    Citation Envoyé par bouye Voir le message
    N'y a-t'il pas une erreur dans la chaine de texte contenant l'addresse (c'est du HTML) :

    Ou alors cette chaine s'est trouvee transformee dans le message quand j'ai remplace QUOTE par CODE.
    C'est bien ça, mon adresse est valide, je n'ai pas le "mailto:" dans le message d'erreur

    Sinon, la plupart des fournisseur ne prennent pas en charge le relay de courriers qui proviennent de l'exterieur et demandent effectivement a s'authentifier lorsque tu te connectes sur le serveur de courrier. Tu te connectes sur leur serveur SMTP via ta connection Orange ? Ou via l'exterieur (ex : de la fac ou de ton boulot) ?
    A titre d'exemple j'ai Thunderbird installé sur ma machine, et j'envoie des mails via la même connexion, sans authentification...

    Citation Envoyé par LordDaedalus Voir le message
    Il y a peu de fournisseurs avec lesquels on peut utiliser simplement le protocole. généralement il y a une demande d'authenfication.
    Voici le code que j'utilise :

    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
    String smtpHost = "smtp......";
            String from = "toto@toto.com";
            String to = "tata@tata.com";
            String username = "?????????";
            String password = "??????????";
     
            Properties props = new Properties();
            props.put("mail.smtp.host", smtpHost);
            props.put("mail.smtp.auth", "true");
     
            Session session = Session.getDefaultInstance(props,null);
            session.setDebug(true);
            try{
            MimeMessage message = new MimeMessage(session); 
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("Hello");
            message.setText("Hello World");
     
     
            Transport tr = session.getTransport("smtp");
            tr.connect(smtpHost, username, password);
            message.saveChanges();
     
            tr.sendMessage(message,message.getAllRecipients());
            tr.close();
     
            }
    Et le mail est envoyé

    Enfin ca c'est la théorie car je ne le recois jamais et il n'y aucun code d'erreur
    Moi aussi mon code fonctionne si (et seulement si) j'utilise l'authentification avec mon log/password de mon provider Orange... Mais mon code ne marche pas si je passe sur un serveur sans authentification (et c'est précisément mon objectif, vous l'aurez compris)

    Si vous avez une idée ?
    Peutêtre qu'à plusieurs on va y arriver
    J'espère bien !
    Peut-etre mettre ta propriété "mail.smtp.auth" à false, et passer l'auth en paramètre de ta session : Session.getDefaultInstance(props,auth)

    A part ça je ne vois aucune différence entre nos 2 codes, ça doit être une piste...

    PS: J'utilise la javamail 1.3, je vais tenter le coup avec la 1.4 voire 1.4.1

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Ok j'ai trouvé mon problème : même si on met la propriété smtp.auth à false, en passant un objet Authenticator à la session celle-ci tente quand même une authentification. En ne lui passant rien du tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Session session = Session.getDefaultInstance(props,null);)
    tout marche nickel sans authentification.

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

Discussions similaires

  1. Problème d'envoi d'email avec SMTP
    Par kariel dans le forum WinDev
    Réponses: 3
    Dernier message: 13/10/2014, 16h10
  2. Problème envoi de mail avec smtp orange
    Par Walba dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2012, 14h09
  3. Problème d'envoie de mail par SMTP
    Par yass dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 12/09/2008, 16h45
  4. [C#] pb avec l'envoie d'Email avec SMTP
    Par hassanibi dans le forum Windows Forms
    Réponses: 22
    Dernier message: 16/04/2007, 16h22
  5. Problème d'envoie de text avec les sockets
    Par Coussati dans le forum Web & réseau
    Réponses: 6
    Dernier message: 16/09/2005, 10h26

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