यहाँ मेरा संदर्भ है। एक्सएमएल - यह उम्मीद के मुताबिक काम कर रहा है, मैं अपने जीमेल खाते में प्राप्त ईमेल प्राप्त कर सकता हूं लेकिन मुख्य समस्या यह है कि मैंने ईमेल का मुख्य भाग प्राप्त करने के लिए कई समाधानों की कोशिश की लेकिन मैं असफल रहा getContent() सभी विधियों के साथ शून्य सूचक अपवाद दें। किसी को भी समस्या है और पता है कि इसे कैसे हल किया जाए?

    <util:properties id="javaMailProperties">
        <prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
        <prop key="mail.imap.socketFactory.fallback">false</prop>
        <prop key="mail.store.protocol">imaps</prop>
        <prop key="mail.debug">false</prop>
    </util:properties>


    <!--  In case you didn't notice: should-delete-messages="false" will make it not delete your emails from the inbox, and should-mark-messages-as-read="true" will mark them as read. -->
    <int-mail:inbound-channel-adapter
        id="imapAdapter"
        store-uri="${imap.uri}"
        channel="recieveEmailChannel"
        should-delete-messages="false" 
        should-mark-messages-as-read="true"
        auto-startup="true" 
        java-mail-properties="javaMailProperties">
        <int:poller fixed-delay="${imap.poolerSecondsDelay}" time-unit="SECONDS" />
    </int-mail:inbound-channel-adapter>

    <int:channel id="recieveEmailChannel">
        <int:interceptors>
            <int:wire-tap channel="logger" />
        </int:interceptors>
    </int:channel>

    <int:logging-channel-adapter id="logger"
        level="DEBUG" />

    <int:service-activator
        input-channel="recieveEmailChannel" ref="emailReceiverService"
        method="receive" />

    <bean id="emailReceiverService"
        class="com.dtp.integration.EmailReceiverService">
    </bean>

</beans>

यहाँ वह कोड है जिसकी मैंने कोशिश की थी

    public void receive(Message<?> message) throws MessagingException, IOException {
        MimeMessage mimeMessage = (MimeMessage) message.getPayload();
        mimeMessage.getAllHeaderLines();
        String messageContent = getTextFromMessage(mimeMessage);
    }

    private String getTextFromMessage(MimeMessage message) throws MessagingException, IOException {
        String result = "";
        if (message.isMimeType("text/plain")) {
            result = message.getContent().toString();
        } else if (message.isMimeType("multipart/*")) {
            MimeMultipart mimeMultipart = (MimeMultipart) message.getContent();
            result = getTextFromMimeMultipart(mimeMultipart);
        }
        return result;
    }

    private String getTextFromMimeMultipart(
            MimeMultipart mimeMultipart)  throws MessagingException, IOException{
        String result = "";
        int count = mimeMultipart.getCount();
        for (int i = 0; i < count; i++) {
            BodyPart bodyPart = mimeMultipart.getBodyPart(i);
            if (bodyPart.isMimeType("text/plain")) {
                result = result + "\n" + bodyPart.getContent();
                break; // without break same text appears twice in my tests
            } else if (bodyPart.isMimeType("text/html")) {
                String html = (String) bodyPart.getContent();
                result = result + "\n" + org.jsoup.Jsoup.parse(html).text();
            } else if (bodyPart.getContent() instanceof MimeMultipart){
                result = result + getTextFromMimeMultipart((MimeMultipart)bodyPart.getContent());
            }
        }
        return result;
    }
2
naji abboud 18 सितंबर 2019, 12:31

1 उत्तर

सबसे बढ़िया उत्तर

आपके योगदान के लिए आप सभी का धन्यवाद, समस्या संदेश पेलोड की सामग्री के साथ थी जो सर्विस एक्टिवेटर बीन के लिए हमेशा अशक्त रहती थी, अंत में मैंने पाया कि मुझे इस सरल लाइन को अपने इनबाउंड एडेप्टर कॉन्फ़िगरेशन पर रखना चाहिए simple-content="true"

1
naji abboud 19 सितंबर 2019, 08:22