使用注解而无需XML配置的Spring邮件接收方法

3

我需要定期检查大约30个邮箱,并希望仅使用注释进行此操作。我知道如何使用XML文件来完成,它看起来像这样:

<mail:inbound-channel-adapter id="ImapAdapter"
                              store-uri="imaps://${login}:${pass}@${host}:993/inbox"
                              channel="testReceiveEmailChannel"
                              should-delete-messages="false"
                              should-mark-messages-as-read="true"
                              auto-startup="true"
                              java-mail-properties="javaMailProperties">
    <int:poller fixed-delay="200"
                time-unit="SECONDS"
                task-executor="asyncTaskExecutor"/>
</mail:inbound-channel-adapter>

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

<int:service-activator input-channel="testReceiveEmailChannel"
                       ref="testMailReceiverService"
                       method="receive"/>

<bean id="testMailReceiverService" class="com.myproject.email.EmailReceiverService">
    <property name="mailBox" value="${login}"/>
</bean>


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

我知道Spring 4+有@InboundChannelAdapter,但我不知道如何使用它。实际上,我是Spring的新手,因此非常感谢任何帮助!


1
这是一个Spring集成问题,而不是Spring或Spring Boot问题。我已经添加了标签。 - M. Deinum
1个回答

4

您正在寻找正确的方式 - @InboundChannelAdapter。如果您仔细查看文档,您会看到类似以下内容:

@Bean
@InboundChannelAdapter(value = "testReceiveEmailChannel", poller = @Poller(fixedDelay = "200000", taskExecutor = "asyncTaskExecutor"))
public MessageSource<javax.mail.Message> mailMessageSource(MailReceiver mailReceiver) {
    MailReceivingMessageSource mailReceivingMessageSource = new MailReceivingMessageSource(mailReceiver);
    // other setters here
    return mailReceivingMessageSource;
}

其中MailReceiver的定义如下:

@Bean
public MailReceiver imapMailReceiver(@Value("imaps://${login}:${pass}@${host}:993/inbox") storeUrl) {
     ImapMailReceiver imapMailReceiver = new ImapMailReceiver(storeUrl);
        // other setters here
     return imapMailReceiver;
}

对于您的EmailReceiverService,其他@Bean,以及MessageChannel@ServiceActivator,请进行翻译。

可以考虑使用Spring Integration Java DSL作为Java配置工具。


谢谢介绍 :) 那么 should-delete-messages="false"should-mark-messages-as-read="true" 这些选项怎么样? - invis
现在我正在尝试实现这个功能,但遇到了问题 - 我不理解这里发生了什么。你能解释一下这里的消息管道吗?并提供@Beans for MessageChannel and @ServiceActivator的代码吗? - invis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接