Java Spring集成以接收电子邮件

Java Spring集成以接收电子邮件,java,spring,spring-boot,Java,Spring,Spring Boot,我使用的是SpringBootVersion2.1.8.RELEASE和SpringIntegrationMail:5.3.2.RELEASE 我正在读spring boot的邮件,我需要找出被退回的邮件。 现在我不知道如何找到被退回的电子邮件,但作为第一步,我尝试从SpringBoot读取电子邮件 我找到了下面的spring集成示例 @Configuration public class EmailIntegrationConfig { @Autowired private

我使用的是SpringBootVersion2.1.8.RELEASE和SpringIntegrationMail:5.3.2.RELEASE

我正在读spring boot的邮件,我需要找出被退回的邮件。 现在我不知道如何找到被退回的电子邮件,但作为第一步,我尝试从SpringBoot读取电子邮件

我找到了下面的spring集成示例

@Configuration
public class EmailIntegrationConfig {

    @Autowired
    private MailMessageHandler mailMessageHandler;

    @Bean
    public IntegrationFlow imapIdleFlow() {
        return IntegrationFlows
                .from(Mail.imapInboundAdapter("imap://username:password@imap.gmail.com:993/INBOX")
                                .searchTermStrategy(this::fromAndNotSeenTerm)
                                .userFlag("testSIUserFlag")
                                .javaMailProperties(p -> p.put("mail.debug", "false")),
                        e -> e.autoStartup(true)
                                .poller(p -> p.fixedDelay(1000)))
                .transform(Mail.toStringTransformer())
                .handle(mailMessageHandler)
                .get();
    }

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

    private SearchTerm fromAndNotSeenTerm(Flags supportedFlags, Folder folder) {
        try {
            FromTerm fromTerm = new FromTerm(new InternetAddress("bar@baz"));
            return new AndTerm(fromTerm, new FlagTerm(new Flags(Flags.Flag.SEEN), false));
        } catch (AddressException e) {
            throw new RuntimeException(e);
        }
    }

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

        PollerMetadata pollerMetadata = new PollerMetadata();
        pollerMetadata.setTrigger(new PeriodicTrigger(1000));
        return pollerMetadata;
    }
}
@配置
公共类EmailIntegrationConfig{
@自动连线
私人邮件处理程序;
@豆子
公共集成流imapIdleFlow(){
返回积分流
.from(Mail.imapInboundAdapter(“imap://username:password@imap.gmail.com:993/收件箱)
.SearchTerm策略(此::fromAndNotSeenTerm)
.userFlag(“testSIUserFlag”)
.javaMailProperties(p->p.put(“mail.debug”,“false”),
e->e.AutoStart(真)
.poller(p->p.fixedDelay(1000)))
.transform(Mail.toString Transformer())
.handle(mailMessageHandler)
.get();
}
@豆子
公共HeaderMapper mailHeaderMapper(){
返回新的DefaultMailHeaderMapper();
}
private SearchTerm from和notseEnterm(标志supportedFlags,文件夹){
试一试{
FromTerm FromTerm=新的FromTerm(新的InternetAddress(“bar@baz"));
返回newandterm(fromTerm,newflagterm(新标志(Flags.Flag.SEEN),false));
}捕获(地址e){
抛出新的运行时异常(e);
}
}
@Bean(name=PollerMetadata.DEFAULT\u POLLER)
公共PollerMetadata defaultPoller(){
PollerMetadata PollerMetadata=新PollerMetadata();
设置触发器(新周期触发器(1000));
返回pollerMetadata;
}
}
邮件处理程序类

@Component
public class MailMessageHandler implements MessageHandler {

    @Override
    public void handleMessage(Message<?> message) throws MessagingException {
        MimeMessage mimeMessage = (MimeMessage) message.getPayload();
        System.out.println(mimeMessage);
    }
}
@组件
公共类MailMessageHandler实现MessageHandler{
@凌驾
public void handleMessage(消息消息消息)引发MessaginException{
MimeMessage MimeMessage=(MimeMessage)message.getPayload();
System.out.println(mimessage);
}
}
在启动应用程序后,在2-3秒内,我得到以下错误

2020-10-14 11:45:24.965 ERROR 26512 --- [ask-scheduler-1] o.s.integration.handler.LoggingHandler   : org.springframework.messaging.MessagingException: failure occurred while polling for mail; nested exception is javax.mail.MessagingException: Connection dropped by server?;
  nested exception is:
    java.io.IOException: Connection dropped by server?
    at org.springframework.integration.mail.MailReceivingMessageSource.doReceive(MailReceivingMessageSource.java:74)
    at org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:160)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:250)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:360)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.pollForMessage(AbstractPollingEndpoint.java:329)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$null$1(AbstractPollingEndpoint.java:277)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$createPoller$2(AbstractPollingEndpoint.java:274)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.mail.MessagingException: Connection dropped by server?;
  nested exception is:
    java.io.IOException: Connection dropped by server?
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:742)
    at javax.mail.Service.connect(Service.java:366)
    at javax.mail.Service.connect(Service.java:246)
    at javax.mail.Service.connect(Service.java:195)
    at org.springframework.integration.mail.AbstractMailReceiver.connectStoreIfNecessary(AbstractMailReceiver.java:332)
    at org.springframework.integration.mail.AbstractMailReceiver.openFolder(AbstractMailReceiver.java:339)
    at org.springframework.integration.mail.AbstractMailReceiver.receive(AbstractMailReceiver.java:371)
    at org.springframework.integration.mail.MailReceivingMessageSource.doReceive(MailReceivingMessageSource.java:60)
    ... 18 more
Caused by: java.io.IOException: Connection dropped by server?
    at com.sun.mail.iap.ResponseInputStream.readResponse(ResponseInputStream.java:119)
    at com.sun.mail.iap.Response.<init>(Response.java:133)
    at com.sun.mail.imap.protocol.IMAPResponse.<init>(IMAPResponse.java:60)
    at com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:412)
    at com.sun.mail.iap.Protocol.<init>(Protocol.java:141)
    at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:131)
    at com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:763)
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:698)
    ... 25 more
2020-10-14 11:45:24.965错误26512---[ask-scheduler-1]o.s.integration.handler.LoggingHandler:org.springframework.messaging.MessagingException:轮询邮件时发生故障;嵌套的异常是javax.mail.MessaginException:服务器断开的连接?;
嵌套异常是:
java.io.IOException:服务器断开了连接?
位于org.springframework.integration.mail.MailReceivingMessageSource.doReceive(MailReceivingMessageSource.java:74)
位于org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:160)
位于org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:250)
位于org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:360)
位于org.springframework.integration.endpoint.AbstractPollingEndpoint.PollFormMessage(AbstractPollingEndpoint.java:329)
位于org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$null$1(AbstractPollingEndpoint.java:277)
位于org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57)
位于org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
位于org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55)
位于org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$createPoller$2(AbstractPollingEndpoint.java:274)
位于org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
位于org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
运行(Thread.java:748)
原因:javax.mail.MessaginException:服务器断开连接?;
嵌套异常是:
java.io.IOException:服务器断开了连接?
在com.sun.mail.imap.IMAPStore.protocolConnect上(IMAPStore.java:742)
在javax.mail.Service.connect(Service.java:366)
在javax.mail.Service.connect(Service.java:246)
在javax.mail.Service.connect(Service.java:195)
在org.springframework.integration.mail.AbstractMailReceiver.ConnectStoreIfEssential上(AbstractMailReceiver.java:332)
位于org.springframework.integration.mail.AbstractMailReceiver.openFolder(AbstractMailReceiver.java:339)
位于org.springframework.integration.mail.AbstractMailReceiver.receive(AbstractMailReceiver.java:371)
位于org.springframework.integration.mail.MailReceivingMessageSource.doReceive(MailReceivingMessageSource.java:60)
... 还有18个
原因:java.io.IOException:服务器断开了连接?
在com.sun.mail.iap.ResponseInputStream.readResponse(ResponseInputStream.java:119)上
位于com.sun.mail.iap.Response(Response.java:133)
在com.sun.mail.imap.protocol.imapreponse上。(imapreponse.java:60)
位于com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:412)
在com.sun.mail.iap.Protocol.(Protocol.java:141)
在com.sun.mail.imap.protocol.IMAPProtocol.(IMAPProtocol.java:131)
在c