Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring集成IMAP-无法获取消息正文_Spring_Spring Integration_Jakarta Mail_Mime Message - Fatal编程技术网

Spring集成IMAP-无法获取消息正文

Spring集成IMAP-无法获取消息正文,spring,spring-integration,jakarta-mail,mime-message,Spring,Spring Integration,Jakarta Mail,Mime Message,这是我的context.xml-它按预期工作,我可以将收到的电子邮件提取到我的gmail帐户 但主要的问题是,我尝试了许多解决方案来获取电子邮件的正文,但是我没有通过getContent()give null pointer异常以及找到的所有方法。 有人有这个问题,知道如何解决吗 <util:properties id="javaMailProperties"> <prop key="mail.imap.socketFactory.class">j

这是我的context.xml-它按预期工作,我可以将收到的电子邮件提取到我的gmail帐户 但主要的问题是,我尝试了许多解决方案来获取电子邮件的正文,但是我没有通过
getContent()
give null pointer异常以及找到的所有方法。 有人有这个问题,知道如何解决吗

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

javax.net.ssl.SSLSocketFactory
假的
imaps
假的
这是我试过的代码

    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;
    }
public void receive(Message Message)抛出MessaginException、IOException{
MimeMessage MimeMessage=(MimeMessage)message.getPayload();
mimessage.getAllHeaderLines();
字符串messageContent=getTextFromMessage(mimeMessage);
}
私有字符串getTextFromMessage(MimeMessage消息)抛出MessagineException、IOException{
字符串结果=”;
if(message.isMimeType(“text/plain”)){
结果=message.getContent().toString();
}else if(message.isMimeType(“multipart/*”){
MimeMultipart MimeMultipart=(MimeMultipart)message.getContent();
结果=GetTextFromMimMultiPart(MimMultiPart);
}
返回结果;
}
私有字符串GetTextFromMiMemMultipart(
MimeMultipart(MimeMultipart)抛出MessaginException、IOException{
字符串结果=”;
int count=mimeMultipart.getCount();
for(int i=0;i
感谢大家的贡献,问题是消息负载的内容总是空的,最后我发现我应该在入站适配器配置中添加这一简单行
simple content=“true”

您是否介意就此事分享堆栈跟踪?感谢@ArtemBilan的贡献,问题在于消息负载的内容始终为空,最后我发现我应该在入站适配器配置中添加这一简单行
simple content=“true”
很好。把它放在一个答案中,接受你自己。它确实可能对其他人有用。您可能也会发现它很有用。@BillShannon谢谢,是的,它对MimeMessage解析也很有用,但如果没有这个
simple content=“true”
它将始终给出空指针异常。