2011-01-06 9 views
5

मैं निम्नलिखित कोड का उपयोग भेजने ठीक लेकिन अनुलग्नक के साथ मेल काम कर रहा है mail.Text संदेश भेजने के लिए काम नहीं कर रहा यह Exception.How इसजावा में संदेश भेजते समय MessagingExceptionIOException?

javax.mail.MessagingException हल करने के लिए देता है: IOException जबकि संदेश भेजने; नेस्टेड अपवाद है: javax.activation.UnsupportedDataTypeException: एमआईएम प्रकार मल्टीपार्ट/मिश्रित के लिए कोई ऑब्जेक्ट डीसीएच नहीं; सीमा = "---- = _ Part_0_10430987.1294298904906" com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:676) पर javax.mail.Transport.send0 (Transport.java:189) पर javax.mail.Transport.send (Transport.java:118) जीमेलर पर .GMailSender.sendMailAttach (GMailSender.java:114) SendMail.main (SendMail.java:22) पर कारण: javax.activation.UnsupportedDataTypeException : एमआईएम प्रकार मल्टीपार्ट/मिश्रित के लिए कोई ऑब्जेक्ट डीसीएच नहीं; सीमा = "---- = _ Part_0_10430987.1294298904906" javax.mail.internet.MimeBodyPart.writeTo पर javax.activation.DataHandler.writeTo (अज्ञात स्रोत) पर javax.activation.ObjectDataContentHandler.writeTo (अज्ञात स्रोत) पर (MimeBodyPart.java:1403) javax.mail.internet.MimeMessage.writeTo (MimeMessage.java:1745) com.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:636) पर 4 ... 4 अधिक

अनुलग्नक कोड के साथ मेल:

public synchronized void sendMailAttach(String subject, String body, 
    String sender, String recipients) { 
try { 
    MimeMessage message = new MimeMessage(session); 

    message.setSender(new InternetAddress(sender)); 
    message.setSubject(subject); 

    // Create the message part 
    BodyPart messageBodyPart = new MimeBodyPart(); 

    // Fill the message 
    messageBodyPart.setText("hi Demo"); 

    Multipart multipart = new MimeMultipart(); 
    multipart.addBodyPart(messageBodyPart); 

    // Part two is attachment 
    messageBodyPart = new MimeBodyPart(); 
    String filename = "mail.txt"; 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 
    multipart.addBodyPart(messageBodyPart); 

    // Put parts in message 
    message.setContent(multipart); 

    if (recipients.indexOf(',') > 0) 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse(recipients)); 
    else 
     message.setRecipient(Message.RecipientType.TO, 
       new InternetAddress(recipients)); 
    Transport.send(message); 

} 
catch (MessagingException e) { 
    System.out.println("MessagingException" + e.getMessage()); 
} 
catch (Exception e) { 
    System.out.println("Mail Send Exception " + e.getMessage()); 
} 
} 

पाठ मेल भेजने कोड:

public synchronized void sendMail(String subject, String body, 
    String sender, String recipients) throws Exception { 
try { 
    MimeMessage message = new MimeMessage(session); 
    DataHandler handler = new DataHandler(new ByteArrayDataSource(
      body.getBytes(), "text/plain")); 
    message.setSender(new InternetAddress(sender)); 
    message.setSubject(subject); 
    message.setDataHandler(handler); 
    if (recipients.indexOf(',') > 0) 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse(recipients)); 
    else 
     message.setRecipient(Message.RecipientType.TO, 
       new InternetAddress(recipients)); 
    Transport.send(message); 
} catch (Exception e) { 

} 
} 
+0

स्टैक ट्रेस अधूरा है, कृपया पूरा एक दें। – Kartoch

+0

http://stackoverflow.com/questions/1969667/send-a-mail-from-java5-and-java6 – dkarp

उत्तर

4

सबसे पहले अपने लॉग में पूर्ण पथ लिखें, आप कर सकते हैं DataSource/DataHandler कोड को स्वयं wrangling के बजाय MimeBodyPart.attachFile() का उपयोग करके आपका कोड थोड़ा और संक्षिप्त है।

दूसरा, उचित मूल्यों के साथ अपने अनुलग्नक भाग पर Content-Type और Content-Disposition हेडर सेट करने का प्रयास करें। , (attachFile डिफ़ॉल्ट रूप से आप के लिए सामग्री-विन्यास सेट हो जाएगा।) उदाहरण के लिए

messageBodyPart = new MimeBodyPart(); 
messageBodyPart.attachFile(new File("mail.txt")); 
messageBodyPart.setHeader("Content-Type", "text/plain; charset=\"us-ascii\"; name=\"mail.txt\""); 



संपादित करें:

थोड़ा सोच के बाद, यह कुछ वर्ग लोड हो रहा है के साथ गलत हो गया है।यह देखने के लिए कि क्या यह आपकी स्थिति का उपचार करता है, कृपया this other SO thread देखें। (सामान्य मुद्दा: शायद आपके क्लासपाथ में एक अतिरिक्त सक्रियण .jar; कुछ अन्य संभावनाएं भी इसका कारण बनती हैं।)

+0

भेजने में सक्षम नहीं हूं, मैं इसे भी आजमाता हूं लेकिन यह मेरे लिए काम नहीं कर रहा है –

0

मुझे लगता है कि आपका प्रोग्राम फ़ाइल mail.txt ढूँढने में सक्षम नहीं है। कृपया सही/पूरा पथ दें। एक अपवाद स्टैकट्रैक अधिक विचार दे सकता है। यदि संभव है तो इसके साथ उत्तर दें। e.printStacktrace();

+0

का डुप्लिकेट मैं फ़ाइल को पढ़ने में सक्षम हूं। लेकिन मैं इसे –

0

यह कक्षा लोडिंग समस्याओं (सक्रियण.जर के डुप्लिकेट संस्करण) से हो सकता है। उदाहरण http://forum.springsource.org/archive/index.php/t-69180.html

के लिए देखें या यह मान गूगल कुछ और

0

सेट:

message.setContent(body, "text/html; charset=UTF-8");  
messageBodyPart.setContent(body, "text/html; charset=UTF-8"); 

इसके अलावा फ़ाइल पथ की जांच, या

1

उस कोड को उस कोड का उपयोग करें और फिर चेक करें जो वास्तव में काम करता है। Frist, कि पैकेज आयात

 
import javax.activation.CommandMap; 
import javax.activation.MailcapCommandMap; 

MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
     mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
     mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
     mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
     mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
     mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
     CommandMap.setDefaultCommandMap(mc); 
0
static { 
    // add handlers for main MIME types 
    MailcapCommandMap mcap = new MailcapCommandMap(); 
    mcap.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
    mcap.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
    mcap.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
    mcap.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed; x-java-fallback-entry=true"); 
    mcap.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
    CommandMap.setDefaultCommandMap(mcap); 
} 
+0

क्या आप कोड समझा सकते हैं? – Korcholis

0

कोशिश अपनी फ़ाइल, mail.txt का सही पथ को परिभाषित करने के।
उदाहरण के लिए अगर यह C: में है तो आगे जाना है और तरह

String filename = ("c:\\users\\mail.txt"); 

पूरे पथ शामिल और कृपया ध्यान दें कि कुछ समय आप ("c:\users\mail.txt") जो एक बैकस्लैश है के साथ समस्याओं का अनुभव हो सकता तो सुरक्षित रहने के लिए सिर्फ बनाने के लिए उन्हें डबल बैकस्लैश

यह भी सुनिश्चित करें कि आप .printStackTrace() विधि का उपयोग करें क्योंकि इससे आपको यह पता चलने में मदद मिलेगी कि आपकी समस्या वास्तव में कहां उत्पन्न होगी, ताकि जब आप उस समस्या पर खोज करेंगे तो आपको यह पता चल जाएगा कि आप क्या खोज रहे हैं।

0

Pls इस लिंक का संदर्भ लें: http://forum.spring.io/forum/osgi-related/dm-server-general/61205-problems-sending-mime-multipart-mails

यह समस्या का एक संभावित कारण बताते हैं और आम तौर पर एक ही समाधान करने के लिए सलाह देते हैं।

मुझे जेबॉस फ्यूज पर अपाचे ऊंट का उपयोग करते समय भी सामना करना पड़ा। मुझे अपने pom.xml को संशोधित करना था ... नीचे स्निपेट देखें:

<!-- add a depency on javax.mail, in addition to the dependency on camel-mail --> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-mail</artifactId> 
     <version>2.10.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.mail</groupId> 
     <artifactId>javax.mail</artifactId> 
     <version>1.5.1</version> 
    </dependency> 

    <!-- explicitly import the com.sun.mail.handlers package under the Import-Package section of the pom.xml --> 

    <Import-Package>com.sun.mail.handlers, *</Import-Package>