服务激活器不适用于InboundChannelAdapter

时间:2018-07-30 11:19:52

标签: spring-boot spring-integration

我必须从我的Gmail帐户阅读新电子邮件。为此,我正在使用spring集成项目。下面是我的代码

    @Component
public class EmailAdapter {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private EmailReceiverService emailReceiverService;

    @Bean
    @InboundChannelAdapter(value = "emailChannel", poller = @Poller(fixedDelay = "10000"))
    public MailReceivingMessageSource mailMessageSource(MailReceiver imapMailReceiver) throws MessagingException {
        emailReceiverService.messageSource();
        return new MailReceivingMessageSource(imapMailReceiver);
    }

    @Bean
    @Value("imaps://<username>:<password>@imap.gmail.com:993/inbox")
    public MailReceiver imapMailReceiver(String imapUrl) {
        ImapMailReceiver imapMailReceiver = new ImapMailReceiver(imapUrl);
        imapMailReceiver.setShouldMarkMessagesAsRead(true);
        imapMailReceiver.setShouldDeleteMessages(false);
        return imapMailReceiver;
    }

    @ServiceActivator(inputChannel = "emailChannel")
    public void emailMessageSource(javax.mail.Message message) {
        logger.info("Message received");
    }
}

在我的应用程序正常启动后,调度程序尝试从收件箱中接收电子邮件,但是当向该帐户发送新电子邮件时,根本没有调用服务激活器。我之所以这样说,是因为我看不到任何日志。

应用程序启动后,请检查输出。

     com.test.email.EmailApplication      : Started EmailApplication in 4.807 seconds (JVM running for 5.295)
[ask-scheduler-1] o.s.integration.mail.ImapMailReceiver    : attempting to receive mail from folder [INBOX]
enter code here

我在这里缺少什么配置?有人可以帮忙吗?

更新

我创建了一个新的Gmail帐户,并尝试了该帐户。我可以阅读电子邮件,以防新电子邮件发送到该帐户。但是,当我尝试读取我的电子邮件帐户(该电子邮件帐户是我所在组织的电子邮件帐户)时,它不起作用。我认为我缺少一些配置。

1 个答案:

答案 0 :(得分:1)

请遵循此example。即使它使用XML进行配置,您也可以轻松地将其转换为基于注释的方法。 根据我在Gmail方面的经验,需要在Gmail帐户设置中启用某些功能,并提供其他属性,您也可以从上面的示例中看到这些属性。