2010-06-05 8 views
9

के लिए कोई प्रदाता नहीं है, मैं एक सरल एप्लिकेशन करने के लिए जावामेल का उपयोग कर रहा हूं जो एक निर्देशिका में कुछ फाइलें पाता है जब एक ईमेल भेजता है। मैं इसे ग्रहण से काम करने में कामयाब रहा। मैं एप्लिकेशन चलाता हूं और इसे बिना किसी त्रुटि के ईमेल भेजता है।जावा मेल: smtp

लेकिन, जब मैंने जार बनाया और इसे निष्पादित किया, तो यह ईमेल भेजने वाले हिस्से में विफल रहता है। यह इस अपवाद देता है:

javax.mail.NoSuchProviderException: No provider for smtp 
at javax.mail.Session.getProvider(Session.java:460) 
at javax.mail.Session.getTransport(Session.java:655) 
at javax.mail.Session.getTransport(Session.java:636) 
at main.java.util.MailManager.sendMail(MailManager.java:69) 
at main.java.DownloadsMail.composeAndSendMail(DownloadsMail.java:16) 
at main.java.DownloadsController.checkDownloads(DownloadsController.java:51) 
at main.java.MainDownloadsController.run(MainDownloadsController.java:26) 
at java.lang.Thread.run(Unknown Source) 

मैं इस पद्धति में पुस्तकालय का उपयोग कर रहा:

public static boolean sendMail(String subject, String text) { 

    noExceptionsThrown = true; 
    try { 
     loadProperties(); 
    } catch (IOException e1) { 
     System.out.println("Problem encountered while loading properties"); 
     e1.printStackTrace(); 
     noExceptionsThrown = false; 
    } 

    Properties mailProps = new Properties(); 

    String host = "mail.smtp.host"; 
    mailProps.setProperty(host, connectionProps.getProperty(host)); 

    String tls = "mail.smtp.starttls.enable"; 
    mailProps.setProperty(tls, connectionProps.getProperty(tls)); 

    String port = "mail.smtp.port"; 
    mailProps.setProperty(port, connectionProps.getProperty(port)); 

    String user = "mail.smtp.user"; 
    mailProps.setProperty(user, connectionProps.getProperty(user)); 

    String auth = "mail.smtp.auth"; 
    mailProps.setProperty(auth, connectionProps.getProperty(auth)); 

    Session session = Session.getDefaultInstance(mailProps); 
    //session.setDebug(true); 

    MimeMessage message = new MimeMessage(session); 

    try { 
     message.setFrom(new InternetAddress(messageProps.getProperty("from"))); 

     message.addRecipient(Message.RecipientType.TO, new InternetAddress(
       messageProps.getProperty("to"))); 

     message.setSubject(subject); 
     message.setText(text); 
     Transport t = session.getTransport("smtp"); 
     try { 
      t.connect(connectionProps.getProperty("user"), passwordProps 
        .getProperty("password")); 
      t.sendMessage(message, message.getAllRecipients()); 
     } catch (Exception e) { 
      System.out.println("Error encountered while sending the email"); 
      e.printStackTrace(); 
      noExceptionsThrown = false; 
     } finally { 
      t.close(); 
     } 
    } catch (Exception e) { 
     System.out.println("Error encountered while creating the message"); 
     e.printStackTrace(); 
     noExceptionsThrown = false; 
    } 
    return noExceptionsThrown; 
} 

मैं गुण फ़ाइलों से इन मूल्यों लोड हो रहा हूँ।

mail.smtp.host=smtp.gmail.com 

mail.smtp.starttls.enable=true 

mail.smtp.port=587 

mail.smtp.auth=true 

मैं SSL द्वारा मेजबान बदलने की कोशिश की है: //smtp.gmail.com, 465 से बंदरगाह (सिर्फ कुछ अलग कोशिश कर के लिए), लेकिन यह या तो काम नहीं करता। वैसे भी, यदि यह मूल पैरामीटर के साथ एक्लिप्स से ठीक काम करता है, तो मुझे लगता है कि मान सही हैं, लेकिन समस्या जार बना रही है। मैं जार बनाने के दौरान संभावित परिणामों या परिवर्तनों के बारे में बहुत कुछ नहीं जानता। जब जार बनाया जाता है तो जावामेल लाइब्रेरी कुछ गलत हो सकती है?

क्या आपके पास कोई विचार है?

उत्तर

10

सहायक जार: mail.jar और activation.jar आपके क्लासपाथ पर नहीं हैं। जब आप अपना जार बनाते हैं, तो आपको इन्हें अपने क्लासपाथ पर शामिल करना होगा।

+0

आप इतनी जल्दी जवाब देने के लिए बहुत बहुत धन्यवाद। मैंने अभी कोशिश की है कि आपने मुझे क्या बताया है, मुझे नहीं पता कि मैंने इसे सही तरीके से किया है: ग्रहण के अंदर, परियोजना के गुणों में, मैंने देखा है कि बिल्ड पथ में, पुस्तकालयों में: activation.jar , mailapi.jar, smtp.jar ... वहाँ हैं। आदेश और निर्यात में, मैंने इन जार की जांच की है। उन्हें पहले चेक नहीं किया गया था। मैंने जार फिर से निर्यात किया है, लेकिन त्रुटि बनी हुई है। क्या मैंने कुछ गलत किया है? शायद मुझे ग्रहण से नहीं करना चाहिए? धन्यवाद माइक। – pablof

+0

मैं ग्रहण से परिचित नहीं हूं।लेकिन यह निश्चित रूप से कक्षापथ से संबंधित कुछ है। आप बदल सकते हैं कि आप जार को अगले चरण के रूप में कैसे चलाते हैं। जब आप अपना जार चलाते हैं तो उन दो जारों के पथ को शामिल करें। तो मेरे सिर के ऊपर से कुछ, जैसे: jar -cp ./full/path/to/activation.jar:.full/path/to/mail.jar-jar yourjarname.jar – Mike

+0

धन्यवाद माइक। मैं इसके साथ कोशिश करूंगा। – pablof

4

मुझे एक ही समस्या थी।

आप एक्लिप्स में रननेबल जेएआर फ़ाइल बनाकर और लाइब्रेरी हैंडलिंग विकल्पों का उपयोग कर इसे ठीक कर सकते हैं। अपना जेएआर बनाते समय दूसरा चुनें, जो "जेनरेटेड जेएआर में पैकेज आवश्यक पुस्तकालय" कहता है।

package required libraries

-1

मैं एक बुरा पुस्तकालय की वजह से इस त्रुटि है, जो था ठीक करने के लिए कामयाब रहे। मैंने मेवेन से डाउनलोड javax.mail जार का उपयोग करने की कोशिश की, जो अधूरा हो गया। तो मैंने javamail के लिए एक बार और अधिक खोज की और एक directly from Oracle प्राप्त किया (रिलीज लिंक पर क्लिक करें)। इस बार यह एक ज़िप फ़ाइल है।

3

आपको smtp.jar फ़ाइल जोड़ने की ज़रूरत है, मैं कुछ Google खोजों के बाद भी एक ही त्रुटि के साथ फंस गया और कुछ पुरानी परियोजनाओं पर जांच कर पाया कि मुझे पता चला कि मुझे अपनी लाइब्रेरी में यह विशेष जार याद आया, मैंने यह जार जोड़ा पुस्तकालय और पाया मुद्दा तय किया।

1

मुझे वही त्रुटि थी, ओरेकल से जार को सीधे अपडेट किया गया था।

0

Gradle का उपयोग कर उन लोगों के लिए: आप सभी आवश्यक जार के रूप में निम्नानुसार (1.5.5 नवीनतम संस्करण है) प्राप्त कर सकते हैं:

compile 'com.sun.mail:javax.mail:1.5.5'