Pertanyaan JavaMail API ke iMail - java.net.SocketException: Izin ditolak: hubungkan


Saya mengalami kesulitan mendapatkan aplikasi untuk menggunakan JavaMail API untuk mengirim beberapa file dengan cara yang lebih otomatis daripada yang biasa kita lakukan. Saya sangat baru di Java dan NetBeans, tetapi telah diprogram dalam bahasa lain, jadi tolong maafkan saya jika saya agak tersesat ke Java dan atau NetBeans.

Saya terus menerima kesalahan ini

java.net.SocketException: Izin ditolak: hubungkan

ketika mencoba terhubung ke server email lokal. Saya telah menghubungkan dan mengirim email dengan sukses melalui server SMTP gmail dengan kode yang sama, hanya mengubah nama pengguna, kata sandi, dan port. Saya juga dapat melakukan telnet ke server kami dengan sukses dan mendapatkan respon 220 dari port 25. Saya juga memiliki file batch yang berjalan dan berhasil mengirim e-mail melalui server lokal kami. Pikiran atau ide apa pun tentang mengapa saya tidak bisa terhubung JavaMail?

Di sini adalah kode yang mengirim e-mail.

Kode sumber:

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

Output dari dua pernyataan 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

19
2017-10-15 18:08


asal


Jawaban:


Menambahkan -Djava.net.preferIPv4Stack=true ke opsi VM. Cara lain untuk mengkonfirmasi apakah itu adalah masalah yang sama, di Netbeans, klik kanan pada proyek> properti> Perpustakaan dan pilih JDK 6 Java Platform (instal jika Anda tidak memilikinya). Bersihkan, buat, lalu coba lagi. Ini akan menghilangkan masalah ini sebagai masalah

Kredit https://stackoverflow.com/a/7478027/643500


19
2017-10-15 18:56



Dalam kasus untuk menyederhanakan permintaan aplikasi (misalnya dari CLI) yang digunakan dalam kode saat mulai:

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

mengandaikan bahwa aplikasi akan bekerja dengan tumpukan jaringan IPv4 lawas.


1
2018-03-16 15:03