मैंने अटैचमेंट के लिए दो तरीके लिखे हैं और एक ईमेल बॉडी कंटेंट के लिए। मुझे ईमेल बॉडी से छवियों को निकालने की जरूरत है। ये दो तरीके ठीक काम कर रहे हैं लेकिन जब ईमेल बॉडी में इमेज आ रही हैं तो इसे डेटाबेस में सेव किया जाना चाहिए। इसलिए इसे बाद में इस्तेमाल किया जा सकता है।

अनुलग्नकों के लिए:- सार्वजनिक स्थैतिक सूची getAttachments (MimeMultipart मल्टीपार्ट, मौजूदा अटैचमेंट सूची) {

    if (multipart != null) {
        try {
            if (existingAttachments == null) {
                existingAttachments = new ArrayList<MimeBodyPart>();
            }
            for (int i = 0; i < multipart.getCount(); i++) {
                if (multipart.getBodyPart(i) instanceof MimeBodyPart) {
                    MimeBodyPart currentPart = (MimeBodyPart) multipart.getBodyPart(i);
                    if (Part.ATTACHMENT.equalsIgnoreCase(currentPart.getDisposition())) {
                        if (!existingAttachments.contains(currentPart)) {
                            existingAttachments.add(currentPart);
                            System.out.println(currentPart.getFileName());
                        }
                    } else if (currentPart.getContent() instanceof MimeMultipart) {
                        existingAttachments = getAttachments((MimeMultipart) currentPart.getContent(), existingAttachments);
                    }
                }
            }
        } catch (MessagingException ex) {
            LoggerFactory.getLogger(EmailUtil.class.getName()).error(ex.getMessage());
        } catch (IOException ex) {
            LoggerFactory.getLogger(EmailUtil.class.getName()).error(ex.getMessage());
        }
    }
    return existingAttachments;
}

ईमेल की मुख्य सामग्री के लिएयह विधि ईमेल के मुख्य भाग की सामग्री को निकाल रही है

public static String getContent(MimeMultipart multipart) {
    String emailContent = null;
    if (multipart != null) {
        try {
            for (int i = 0; i < multipart.getCount(); i++) {
                if (multipart.getBodyPart(i) instanceof MimeBodyPart) {
                    MimeBodyPart currentPart = (MimeBodyPart) multipart.getBodyPart(i);
                    if (Part.INLINE.equalsIgnoreCase(currentPart.getDisposition())) {
                        LoggerFactory.getLogger(EmailUtil.class.getName()).info("Content dispo is inline");
                        emailContent = (String) currentPart.getContent();
                    } else if (currentPart.getDisposition() == null && currentPart.getContentType().toLowerCase().contains("text")) {
                        LoggerFactory.getLogger(EmailUtil.class.getName()).info("Content dispo is null and type is text/*");
                        try {
                           emailContent = (String) currentPart.getContent();

                        } catch (ClassCastException ex) {
                            LoggerFactory.getLogger(EmailUtil.class.getName()).warn("Classcast exception caught and managed");
                            try {
                                InputStream is = currentPart.getInputStream();

                                emailContent = IOUtils.toString(is, currentPart.getEncoding());
                                Document doc=Jsoup.parse(emailContent);
                                Elements elements =doc.getElementsByTag("img");
                                System.out.println(elements);
                                int htmlCloseIndex = emailContent.indexOf("</html>");
                                emailContent = emailContent.substring(0, htmlCloseIndex);
                                emailContent+="</html>";
                            } catch (Exception e) {
                                LoggerFactory.getLogger(EmailUtil.class.getName()).error("Exception rebound caught and managed, email content will not read");
                                //emailContent = "Unable to read email content";
                                e.printStackTrace();
                            }
                        }
                    }else if (currentPart.getDisposition() == null && currentPart.getContentType().contains("TEXT")) {
                        LoggerFactory.getLogger(EmailUtil.class.getName()).info("Content dispo is null and type is TEXT/*");
                        try {
                            emailContent = (String) currentPart.getContent();
                        } catch (ClassCastException ex) {
                            LoggerFactory.getLogger(EmailUtil.class.getName()).warn("Classcast exception caught and managed");
                            try {
                                InputStream is = currentPart.getInputStream();
                                emailContent = IOUtils.toString(is, currentPart.getEncoding());

                                int htmlCloseIndex = emailContent.indexOf("</html>");
                                emailContent = emailContent.substring(0, htmlCloseIndex);
                                emailContent+="</html>";
                            } catch (Exception e) {
                                LoggerFactory.getLogger(EmailUtil.class.getName()).error("Exception rebound caught and managed, email content will not read");
                                //emailContent = "Unable to read email content";
                                e.printStackTrace();
                            }
                        }
                    } 
                    else if (currentPart.getContent() instanceof MimeMultipart) {
                        emailContent = getContent((MimeMultipart) currentPart.getContent());

                    }
                }
            }
        } catch (MessagingException ex) {
            LoggerFactory.getLogger(EmailUtil.class.getName()).error(ex.getMessage());
            LoggerFactory.getLogger(EmailUtil.class.getName()).warn("email content will not read");
           //emailContent = "Unable to read email content";
        } catch (IOException ex) {
            LoggerFactory.getLogger(EmailUtil.class.getName()).error(ex.getMessage());
            LoggerFactory.getLogger(EmailUtil.class.getName()).warn("email content will not read");
           // emailContent = "Unable to read email content";
        } catch (ClassCastException ex) {
            LoggerFactory.getLogger(EmailUtil.class.getName()).warn("Classcast exception caught and managed");
        // emailContent = "Unable to read email content";
        }
    }
    return emailContent;
}
1
Rajan jha 19 नवम्बर 2019, 14:21
आपका प्रश्न स्पष्ट नहीं है। क्या आप निर्दिष्ट कर सकते हैं कि आप वास्तव में किससे सहायता चाहते हैं? मैं कई समस्याओं के बारे में सोच सकता हूं जिनका आप मतलब कर सकते हैं: किसी छवि के बाइट कैसे प्राप्त करें, डेटाबेस में छवि डेटा कैसे संग्रहीत करें। एक साइड नोट के रूप में/आपके प्रश्न के लिए केंद्रीय नहीं: क्लासकास्ट एक्सेप्शन को पकड़ना मेरी राय में खराब अभ्यास है जब आपके पास ऑपरेटर का उदाहरण है, तो आप यह जांचने के लिए उपयोग कर सकते हैं कि कोई ऑब्जेक्ट कक्षा का हिस्सा है या नहीं।
 – 
Joeblade
19 नवम्बर 2019, 15:50
हां, मैं छवि का बाइट प्राप्त करना चाहता हूं और अपनी स्थानीय निर्देशिका में स्टोर करना चाहता हूं।
 – 
Rajan jha
20 नवम्बर 2019, 09:38

1 उत्तर

ठीक है एक <img src="..."> टैग के साथ शुरू होता है, आप पहले ही ले चुके हैं:

Elements elements = doc.getElementsByTag("img");

एम्बेड की गई छवि के लिए एक img टैग इस तरह दिखता है:

<img src="data:image/jpeg;base64,..." ...>

तो src विशेषता होने पर:

String src = ...
if (src.startsWith("data:")) { // Embedded image data.
    int p = src.indexOf(';'); // Or better ";base64,"
    if (p == -1) {
        throw new IllegalArgumentException();
    }
    String mimeType = src.substring(5, p);
    String base64Data = src.substring(p + 1 + 6 + 1); // ";base64,"
    byte[] data = Base64.getDecoder().decode(base64Data);
    String file = "test." + mimeType.replaceFirst("^.*/(.*)$", "$1");
    Path path = Paths.get(file);
    Files.write(path, data);
}
0
Joop Eggen 19 नवम्बर 2019, 15:20