Spring Mail Integration-如何将org.springframework.messaging.Message转换为javax.mail.internet.MimeMessage

问题描述 投票:1回答:1

我正在创建一项需要侦听和处理邮件帐户中收到的任何新电子邮件的服务。

问题:我无法将在handleMessageInternal(Message<?> message)方法中收到的消息转换为MimeMessage类型的任何形式,可以用来获取to / cc地址和/或附加的任何文件。] >

我的邮件配置类:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.mail.dsl.Mail;
import org.springframework.integration.mail.support.DefaultMailHeaderMapper;
import org.springframework.integration.mapping.HeaderMapper;
import org.springframework.integration.scheduling.PollerMetadata;
import org.springframework.scheduling.support.PeriodicTrigger;

import javax.mail.internet.MimeMessage;

@Configuration
public class MailConfiguration {

     @Bean
    public IntegrationFlow imapMailFlow() {
        return IntegrationFlows
                .from(Mail.imapInboundAdapter("imaps://username:[email protected]:" + 993 + "/INBOX")
                                .javaMailProperties(p -> p.put("mail.debug", "true"))
                                .headerMapper(mailHeaderMapper()),
                        e -> e.autoStartup(true).poller(p -> p.fixedDelay(5000)))
                .handle(new MailHandler())
                .get();
    }

    @Bean
    public HeaderMapper<MimeMessage> mailHeaderMapper() {
        return new DefaultMailHeaderMapper();
    }

    @Bean(name = PollerMetadata.DEFAULT_POLLER)
    public PollerMetadata defaultPoller() {

        PollerMetadata pollerMetadata = new PollerMetadata();
        pollerMetadata.setTrigger(new PeriodicTrigger(1000));
        return pollerMetadata;
    }
}

我的MailHandler类:

import org.springframework.integration.handler.AbstractMessageHandler;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import javax.mail.internet.MimeMessage;

@Component
public class MailHandler extends AbstractMessageHandler {

    @Override
    protected void handleMessageInternal(Message<?> message) {
        System.out.println("RECEIVED NEW MAIL");

        //Doesnt Work
        MimeMessage mimeMessage = (MimeMessage) message.getPayload();

        //Doesnt Work
        MimeMessage mimeMessage = (MimeMessage) message;

    }
}

如果有可能将消息转换为也可以使用的自定义域模型。

任何帮助将不胜感激。

我正在创建一项服务,该服务需要侦听和处理邮件帐户中收到的任何新电子邮件。问题:我无法转换在handleMessageInternal(...)中收到的消息

要访问包括附件在内的所有电子邮件内容,您需要配置autoCloseFolder(false),并且不应具有该.headerMapper(mailHeaderMapper())
查看文档:https://docs.spring.io/spring-integration/docs/5.3.0.RC1/reference/html/mail.html#mail-mapping

启用消息映射后,有效负载取决于邮件消息及其实现。电子邮件内容通常由DataHandler中的MimeMessage呈现。

也是这里:https://docs.spring.io/spring-integration/docs/5.3.0.RC1/reference/html/mail.html#mail-inbound

保持文件夹打开状态在解析带有附件的电子邮件的多部分内容时需要与服务器通信的情况下很有用。

这样,您的处理程序中的message.getPayload()实际上可以转换为MimeMessage

java spring spring-integration
1个回答
0
投票

启用消息映射后,有效负载取决于邮件消息及其实现。电子邮件内容通常由DataHandler中的MimeMessage呈现。

© www.soinside.com 2019 - 2024. All rights reserved.