API JavaMail для iMail java.net.SocketException: разрешение отклонено: подключение

У меня возникли проблемы с тем, чтобы приложение использовало JavaMail API для отправки некоторых файлов более автоматизированным способом, чем мы привыкли. Я новичок в Java и NetBeans, но программировал на других языках, поэтому, пожалуйста, простите меня, если я немного потерялся в Java и/или NetBeans.

Я продолжаю получать эту ошибку

java.net.SocketException: разрешение отклонено: подключение

при попытке подключения к локальному почтовому серверу. Я успешно подключился и отправил почту через SMTP-сервер gmail с тем же кодом, просто изменив имя пользователя, пароль и порт. Я также смог успешно подключиться к нашему серверу через telnet и получить ответ 220 с порта 25. У меня также есть запущенный пакетный файл, который успешно отправляет электронную почту через наш локальный сервер. Есть мысли или идеи, почему я не могу подключиться через JavaMail?

Вот код, который отправляет электронное письмо.

Исходный код:

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());
   }
}

Вывод из двух операторов 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

person John    schedule 15.10.2012    source источник
comment
ЖДК 7? Проверьте этого парня stackoverflow.com/a/7478027/643500   -  person Hitham S. AlQadheeb    schedule 15.10.2012
comment
Я добавил -Djava.net.preferIPv4Stack=true в свой файл конфигурации NetBeans, но у меня все еще есть ошибка. Тем не менее, он по-прежнему позволяет мне отправлять сообщения из учетной записи gmail. Спасибо за быстрый ответ.   -  person John    schedule 15.10.2012
comment
Это должно перейти к параметрам виртуальной машины. Другой способ подтвердить, является ли это той же проблемой, в Netbeans, щелкнуть правой кнопкой мыши проект > свойства > библиотеки и выбрать платформу Java JDK 6 (установить, если у вас ее нет). Очистите, соберите и повторите попытку. Это устранит эту проблему как проблему.   -  person Hitham S. AlQadheeb    schedule 15.10.2012
comment
Спасибо большое. Это была проблема. Я просто недостаточно понимал NetBeans. Я поставил -Djava.net.preferIPv4Stack=true не в том месте. Добавил в VM Options и все заработало.   -  person John    schedule 15.10.2012
comment
У меня такое же исключение, но мы используем java 8.171. Там должно работать? Сейчас я исчерпал все свои ресурсы.   -  person Raghuveer    schedule 17.08.2018


Ответы (2)


Добавьте -Djava.net.preferIPv4Stack=true к параметрам виртуальной машины. Другой способ подтвердить, является ли это той же проблемой, в Netbeans, щелкнуть правой кнопкой мыши проект> свойства> библиотеки и выбрать платформу Java JDK 6 (установить, если у вас ее нет). Очистите, соберите и повторите попытку. Это устранит эту проблему как проблему

Кредит https://stackoverflow.com/a/7478027/643500

person Hitham S. AlQadheeb    schedule 15.10.2012

В случае упрощения вызова приложения (например, из CLI), используемого в коде при запуске:

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

предположим, что приложение будет работать с устаревшим сетевым стеком IPv4.

person Ruslan    schedule 16.03.2017