Java Spring集成以接收电子邮件
我使用的是SpringBootVersion2.1.8.RELEASE和SpringIntegrationMail:5.3.2.RELEASE 我正在读spring boot的邮件,我需要找出被退回的邮件。 现在我不知道如何找到被退回的电子邮件,但作为第一步,我尝试从SpringBoot读取电子邮件 我找到了下面的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
@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