petit prog SMTP avec authentification et SSL

petit prog SMTP avec authentification et SSL - Java - Programmation

Marsh Posté le 24-05-2004 à 11:21:49    

J'ai un serveur SMTP avec authentification et SSL.
Pour tester ce serveur, j'essaie de me connecter avec Outlook, telnet, no pb, ca marche.
Lorsque j'essaie avec mon prog, il me dit "could not connect to SMTP host..."
Voici le code:

Code :
  1. String username = "monCompte";
  2.     String password = "monPassword";
  3.     String smtphost = "smtp.monserveur.fr";
  4.     String subject = "This is a JavaMail API Test";
  5.     String from = "moi@monmail.com";
  6.     String to = "toi@monmail.com";
  7.     String mailer = "JavaMail API";
  8.     EmailAuthenticator authenticator = new EmailAuthenticator(username, password);
  9.     try {
  10.       Properties props = System.getProperties();
  11.       props.put("mail.debug", "true" );
  12.       props.put("mail.smtp.auth", "true" );
  13.       java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  14.       props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory" );
  15.       props.setProperty("mail.smtp.socketFactory.fallback", "false" );
  16.       props.setProperty("mail.smtp.socketFactory.port", "25" );
  17.       props.setProperty("mail.smtp.host", smtphost);
  18.       props.setProperty("mail.smtp.port", "25" );
  19.       props.setProperty("mail.smtp.timeout", ""+300*1000);
  20.       props.setProperty("mail.smtp.connectiontimeout", "" + 300*1000);
  21.       // Get a Session object
  22.       Session session = Session.getInstance(props, authenticator);
  23.       // construct the message
  24.       Message msg = new MimeMessage(session);
  25.       msg.setFrom(new InternetAddress(from));
  26.       msg.setRecipients(Message.RecipientType.TO,
  27.                         InternetAddress.parse(to, false));
  28.       msg.setSubject(subject);
  29.       msg.setText("Sample Message" );
  30.       msg.setHeader("X-Mailer", mailer);
  31.       msg.setSentDate(new Date());
  32.       Transport tr = session.getTransport("smtp" );
  33.       tr.connect();
  34.       msg.saveChanges();
  35.       tr.sendMessage(msg, msg.getAllRecipients());
  36.       tr.close();
  37.       System.out.println("\nMail was sent successfully." );
  38.     } catch (Exception e) {
  39.       e.printStackTrace();
  40.     }


 
Une MessagingException est lancee a tr.connect()
 
Note : j'ai le certificat du serveur smtp dans mon cacerts.
 
Quelqu'un peut me dire ce que je pourrais faire pour que ca marche?
Merci.

Reply

Marsh Posté le 24-05-2004 à 11:21:49   

Reply

Marsh Posté le 25-05-2004 à 10:21:57    

up

Reply

Marsh Posté le 25-05-2004 à 22:28:44    

Pour comprendre le problème, il faut savoir un peu comment fonctionne le protocole SMTP.
Initialement, la connexion est non chiffrée. C'est assez logique, vu qu'on utilise le même port (le 25) aussi bien pour les connexion chiffrée ou non.
Donc, si tu utilises un Socket SSL, ça ne va pas marcher.
Le passage en mode sécurisé se fait après coup, en envoyant la commande STARTTLS.
 
Après un petit coup de Google, il semble que le transport SMTP standard de JavaMail ne supporte pas ça, mais qu'il en existe un autre qui le supporte (http://www.gnu.org/software/classpathx/, pas accessible en ce moment)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed