2012-10-15 22 views
17

JavaMail API'sini kullanarak, bazı dosyaları, yaptığımızdan daha otomatik bir şekilde göndermek için bir uygulama almakta sorun yaşıyorum. Java ve NetBeans için çok yeni, ancak başka dillerde programlanmış, bu yüzden lütfen Java ve NetBeans için biraz kayıp gibi görünüyorsa lütfen beni affet.iMail için JavaMail API'sı - java.net.SocketException: İzin reddedildi: bağlan

bu hatayı

java.net.SocketException almaya devam: İzin reddedildi: yerel posta sunucusuna bağlanmaya çalışırken

bağlayın. Gmail'in SMTP sunucusu üzerinden aynı kodu kullanarak, sadece kullanıcı adı, parola ve bağlantı noktasını değiştirerek postaları başarıyla bağladım. Sunucumuza başarılı bir şekilde telnet yapabildim ve 25 numaralı bağlantı noktasından 220 yanıt aldım. Ayrıca çalışmakta olan bir toplu iş dosyasına sahibim ve yerel sunucudan e-posta gönderir. JavaMail aracılığıyla neden bağlantı kuramadığımı gösteren herhangi bir düşünce veya fikir var mı?

İşte e-postayı gönderen kod.

Kaynak kodu: İki İstisna açıklamalarından

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

Çıktı:

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 
+0

JDK 7? Bu adamı kontrol edin http://stackoverflow.com/a/7478027/643500 –

+0

NetBeans yapılandırma dosyasına -Djava.net.preferIPv4Stack = true ekledim, ancak yine de hatam var. Yine de bir gmail hesabından göndermeme izin veriyor. Hızlı yanıt için teşekkür ederim. – John

+1

Bu, VM seçeneklerine gitmeli. Netbeans'de aynı sorun olup olmadığını doğrulamanın başka bir yolu, proje> özellikler> Kütüphaneler üzerine sağ tıklayın ve bir JDK 6 Java Platform'u seçin (eğer sahip değilseniz kurun). Temizleyin, kurun ve tekrar deneyin. Bu sorun olarak bu sorunu ortadan kaldıracaktır. –

cevap

18

VM seçeneklerine -Djava.net.preferIPv4Stack=true ekleyin. Netbeans'de aynı sorun olup olmadığını doğrulamanın başka bir yolu, proje> özellikler> Kütüphaneler üzerine sağ tıklayın ve bir JDK 6 Java Platform'u seçin (eğer sahip değilseniz kurun). Temizleyin, kurun ve tekrar deneyin. Bu sorun olarak bu sorunu ortadan kaldıracaktır

Kredi başlangıcında kodunda kullanılan uygulama çağırmayı (örn CLI'den) basitleştirmek durumda https://stackoverflow.com/a/7478027/643500

1

: supposing

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

uygulaması olacak o Eski IPv4 ağ yığını ile çalışıyor.