[SPRING] ImapMailReceiver 읽기 전용 폴더에 저장 시도 안 함 (실패) [찌그러 뜨림];
SPRINGImapMailReceiver 읽기 전용 폴더에 저장 시도 안 함 (실패) [찌그러 뜨림];
나는이 예외를 설명하기 위해 하루를 보냈다. ImapMailReceiver 및 ImapIdleChannelAdapter 프로그래밍 방식으로 구성하려고합니다.
나는이 질문에 대한 튜토리얼을 Pro Spring Integration book에있는 작은 정보로 찾지 못했습니다.
public void loadMessages() {
ImapIdleChannelAdapter imapIdleChannelAdapter = null;
ImapMailReceiver imapMailReceiver = null;
try {
imapMailReceiver = new ImapMailReceiver("imaps://" + URLEncoder.encode(USERNAME, "UTF-8") + ":" + PASSWORD + "@imap.gmail.com:993/INBOX");
imapMailReceiver.setShouldMarkMessagesAsRead(true);
imapMailReceiver.setShouldDeleteMessages(false);
Properties javaMailProperties = new Properties();
javaMailProperties.put(MAIL_IMAP_SOCKET_FACTORY_CLASS, environment.getProperty(MAIL_IMAP_SOCKET_FACTORY_CLASS, SOCKET_FACTORY_CLASS));
javaMailProperties.put(MAIL_IMAP_SOCKET_FACTORY_FALLBACK, environment.getProperty(MAIL_IMAP_SOCKET_FACTORY_FALLBACK, Boolean.class, SOCKET_FACTORY_FALLBACK));
javaMailProperties.put(MAIL_STORE_PROTOCOL, environment.getProperty(MAIL_STORE_PROTOCOL, INBOX_MAIL_PROTOCOL));
javaMailProperties.put(MAIL_DEBUG, environment.getProperty(MAIL_DEBUG, Boolean.class, MAIL_DEBUG_VAL));
imapMailReceiver.setJavaMailProperties(javaMailProperties);
imapMailReceiver.setJavaMailAuthenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(environment.getProperty(RECEIVE_MESSAGE_POOL_SIZE, Integer.class, DEFAULT_RECEIVE_MESSAGE_POOL_SIZE));
threadPoolTaskScheduler.afterPropertiesSet();
DirectChannel directChannel = new DirectChannel();
directChannel.subscribe(new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws org.springframework.messaging.MessagingException {
LOGGER.info("Message: " + message);
}
});
imapIdleChannelAdapter = new ImapIdleChannelAdapter(imapMailReceiver);
imapIdleChannelAdapter.setAutoStartup(true);
imapIdleChannelAdapter.setShouldReconnectAutomatically(true);
imapIdleChannelAdapter.setTaskScheduler(threadPoolTaskScheduler);
imapIdleChannelAdapter.setOutputChannel(directChannel);
imapIdleChannelAdapter.start();
} catch (IllegalStateException iex){
LOGGER.debug("Receiving messages failed", iex);
iex.printStackTrace();
imapIdleChannelAdapter.stop();
try{
imapMailReceiver.destroy();
} catch (Exception ex){
LOGGER.debug("Impossible destroy imapMailReceiver", ex);
ex.printStackTrace();
}
} catch (UnsupportedEncodingException uex) {
LOGGER.debug("UnsupportedEncoding Exception", uex);
uex.printStackTrace();
}
}
내 스택 추적
09:13:27,429 INFO ImapMailReceiver:251 - attempting to receive mail from folder [INBOX]
09:13:34,840 WARN ImapIdleChannelAdapter:230 - error occurred in idle task
javax.mail.MessagingException: A13 NO STORE attempt on READ-ONLY folder (Failure) [THROTTLED];
nested exception is:
com.sun.mail.iap.CommandFailedException: A13 NO STORE attempt on READ-ONLY folder (Failure) [THROTTLED]
at com.sun.mail.imap.IMAPMessage.setFlags(IMAPMessage.java:858)
at javax.mail.Message.setFlag(Message.java:574)
at org.springframework.integration.mail.AbstractMailReceiver.setMessageFlags(AbstractMailReceiver.java:317)
at org.springframework.integration.mail.AbstractMailReceiver.postProcessFilteredMessages(AbstractMailReceiver.java:283)
at org.springframework.integration.mail.AbstractMailReceiver.receive(AbstractMailReceiver.java:272)
at org.springframework.integration.mail.ImapIdleChannelAdapter$IdleTask.run(ImapIdleChannelAdapter.java:216)
at org.springframework.integration.mail.ImapIdleChannelAdapter$ReceivingTask.run(ImapIdleChannelAdapter.java:184)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
나는 또한 그러한 유형의 결정을 발견한다.
http://harikrishnan83.wordpress.com/2009/01/24/access-gmail-with-imap-using-java-mail-api/ http://metoojava.wordpress.com/2010/03/21/java-code-to-receive-mail-using-javamailapi/
그러나 사람들이 메시지를 얻기 위해 왜이 방법을 사용하는지 이해할 수 없습니다. (주요 소스는 Spring Pro Integration 및 Spring 문서에서 이러한 유형의 솔루션을 찾을 수 없기 때문입니다)
제발, 누구든지 나를 설명 할 수 있니? 1)이 경우 ImapIdleChannelAdapter를 사용해야하며 저장소를 가져 와서 사서함에 연결하기위한 세션 일 때만 사용해야합니다. 2) 왜 'READ-ONLY 폴더에서 NO STORE 시도'예외가 발생합니까?
해결법
-
==============================
1.imapMailReceiver.afterPropertiesSet ()을 호출해야 this.folderOpenMode = Folder.READ_WRITE;가 전환됩니다. 귀하의 경우 그것은 여기에 누워 보입니다 :
imapMailReceiver.afterPropertiesSet ()을 호출해야 this.folderOpenMode = Folder.READ_WRITE;가 전환됩니다. 귀하의 경우 그것은 여기에 누워 보입니다 :
imapMailReceiver.setJavaMailAuthenticator(new Authenticator() { ... }); imapMailReceiver.afterPropertiesSet();
실제로 거의 모든 Spring Integration 컴포넌트는 Spring Bean으로 설정되어야하고 Container는 초기화에주의를 기울일 것이다. 새 4.0 버전에서는 JavaConfig에 대한 충분한 옵션을 제공합니다. https://spring.io/blog/2014/04/30/spring-integration-4-0-released.
기본적으로 Folder.READ_ONLY 인 이유는 분명치 않으며 문제에 관해서는 설득력이 없습니다.
JIRA 문제를 제기하십시오. https://jira.spring.io/browse/INT
실제로 귀하의 메일 제공 업체에 따라 다릅니다. Spring Integration은 Pop3MailReceiver와 ImapMailReceiver의 두 가지 구성 요소를 제공합니다. 물론 로컬 디렉토리에 메시지를 가져 오지 않고 Listener를 지원하기 때문에 Imap이 더 좋습니다. Pop3 당신은 주기적으로 핑을해야합니다.
from https://stackoverflow.com/questions/23824241/imapmailreceiver-no-store-attempt-on-read-only-folder-failure-throttled by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 부트 H2 콘솔 액세스 (0) | 2019.08.01 |
---|---|
[SPRING] Spring EL 표현식에 커스터마이징 주석 매개 변수를 전달할 수 있습니까? (0) | 2019.08.01 |
[SPRING] SpringBootApplication이 내 서비스를 Autowire하지 않습니다. (0) | 2019.07.26 |
[SPRING] 왜 Spring 부트 2.1.4에서 2.1.5 로의 변경이 알려지지 않은 설정 Maven 오류를 발생 시키는가? (0) | 2019.07.26 |
[SPRING] 하위 데이터를 저장할 때 지속되도록 분리 된 엔터티 전달 (0) | 2019.07.25 |