web-dev-qa-db-fra.com

API JavaMail vers iMail - Java.net.SocketException: autorisation refusée: connexion

J'ai du mal à obtenir une application pour utiliser l'API JavaMail pour envoyer certains fichiers d'une manière plus automatisée que ce que nous avons l'habitude de faire. Je suis très nouveau à Java et NetBeans, mais j'ai programmé dans d'autres langages, alors pardonnez-moi si je semble un peu perdu face à Java et ou NetBeans).

Je reçois toujours cette erreur

Java.net.SocketException: autorisation refusée: connexion

lorsque vous essayez de vous connecter au serveur de messagerie local. J'ai connecté et envoyé du courrier avec succès via le serveur SMTP de gmail avec le même code, en changeant simplement le nom d'utilisateur, le mot de passe et le port. J'ai également pu établir une connexion Telnet avec succès sur notre serveur et obtenir une réponse 220 du port 25. J'ai également un fichier de commandes qui s'exécute et il envoie avec succès des e-mails via notre serveur local. Avez-vous des idées ou des raisons pour lesquelles je ne peux pas me connecter via JavaMail?

Voici le code qui envoie l'e-mail.

Code source:

public void sendEmail(String customerNumber, ArrayList fileList){
   String from = "xxxx";
   String username = "xxxx";
   String to = "xxxx";
   String Host = "10.1.1.6";
   String pwd = "xxxx";
   String port = "25";

   Properties props = System.getProperties();
   props.put("mail.smtp.Host", Host);
   props.put("mail.smtp.port", port);
   props.put("mail.smtp.user", username);
   props.put("mail.smtp.auth", "true");
   props.put("mail.smtp.starttls.enable", "true");
   props.put("mail.smtp.debug", "true");
   props.put("mail.smtp.socketFactory.port", port);
   props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
   props.put("mail.smtp.socketFactory.fallback", "false");

   Session session = Session.getInstance(props, null);
   session.setDebug(true);

   MimeMessage message = new MimeMessage(session);
   try{
       message.setFrom(new InternetAddress(from));
       message.setRecipients(Message.RecipientType.TO, to);
       message.setSubject("Electronic Invoices");
       BodyPart messageBodyPart = new MimeBodyPart();
       messageBodyPart.setText("Electronic Invoices");
       Multipart multipart = new MimeMultipart();
       multipart.addBodyPart(messageBodyPart);
       for(int i = 0; i < fileList.size(); i++){
           messageBodyPart = new MimeBodyPart();
           String fileName = (String) fileList.get(i);
           DataSource source = new FileDataSource(fileName);
           messageBodyPart.setDataHandler(new DataHandler(source));
           messageBodyPart.setFileName(fileName);
           multipart.addBodyPart(messageBodyPart);
       }
       message.setContent(multipart);

       Transport tr;
       tr = session.getTransport("smtp");
       tr.connect(Host, username, pwd);
       tr.sendMessage(message, message.getAllRecipients());
       jTextArea2.append("Mail Sent Successfully");
       tr.close();

   } catch(Exception e){
       jTextArea2.append("sendEmail()::" + System.getProperty("line.separator") + e + System.getProperty("line.separator"));
       System.out.println(e.getMessage());
       System.out.println(e.getCause());
   }
}

Sortie des deux instructions d'exception:

DEBUG: setDebug: JavaMail version 1.4.5
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.Sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to Host "10.1.1.6", port 25, isSSL false
Could not connect to SMTP Host: 10.1.1.6, port: 25
Java.net.SocketException: Permission denied: connect
20
John

Ajouter -Djava.net.preferIPv4Stack=true aux options VM. Une autre façon de confirmer s'il s'agit du même problème, dans Netbeans, faites un clic droit sur le projet> propriétés> Bibliothèques et choisissez un JDK 6 Java Plate-forme (installez-la si vous ne l'avez pas). Nettoyez, construisez puis réessayez. Cela éliminera ce problème en tant que problème.

Crédit https://stackoverflow.com/a/7478027/6435

20

Dans le cas de simplifier l'appel de l'application (par exemple à partir de CLI) utilisé dans le code au démarrage:

System.setProperty("Java.net.preferIPv4Stack", "true")

en supposant que l'application fonctionnera avec la pile réseau IPv4 héritée.

1
Ruslan