List of usage examples for org.springframework.integration.mail AbstractMailReceiver setShouldDeleteMessages
public void setShouldDeleteMessages(boolean shouldDeleteMessages)
From source file:eu.openanalytics.rsb.component.EmailDepositHandler.java
@PostConstruct public void setupChannelAdapters() throws URISyntaxException { final List<DepositEmailConfiguration> depositEmailConfigurations = getConfiguration() .getDepositEmailAccounts();//from www. j ava 2 s . c o m if ((depositEmailConfigurations == null) || (depositEmailConfigurations.isEmpty())) { return; } for (final DepositEmailConfiguration depositEmailConfiguration : depositEmailConfigurations) { final PeriodicTrigger trigger = new PeriodicTrigger(depositEmailConfiguration.getPollingPeriod(), TimeUnit.MILLISECONDS); trigger.setInitialDelay(5000L); AbstractMailReceiver mailReceiver = null; final URI emailAccountURI = depositEmailConfiguration.getAccountURI(); if (StringUtils.equals(emailAccountURI.getScheme(), "pop3")) { mailReceiver = new Pop3MailReceiver(emailAccountURI.toString()); } else if (StringUtils.equals(emailAccountURI.getScheme(), "imap")) { mailReceiver = new ImapMailReceiver(emailAccountURI.toString()); ((ImapMailReceiver) mailReceiver).setShouldMarkMessagesAsRead(true); } else { throw new IllegalArgumentException("Invalid email account URI: " + emailAccountURI); } mailReceiver.setBeanFactory(beanFactory); mailReceiver.setBeanName("rsb-email-ms-" + emailAccountURI.getHost() + emailAccountURI.hashCode()); mailReceiver.setShouldDeleteMessages(true); mailReceiver.setMaxFetchSize(1); mailReceiver.afterPropertiesSet(); final MailReceivingMessageSource fileMessageSource = new MailReceivingMessageSource(mailReceiver); final HeaderSettingMessageSourceWrapper<javax.mail.Message> messageSource = new HeaderSettingMessageSourceWrapper<javax.mail.Message>( fileMessageSource, EMAIL_CONFIG_HEADER_NAME, depositEmailConfiguration); final SourcePollingChannelAdapter channelAdapter = new SourcePollingChannelAdapter(); channelAdapter.setBeanFactory(beanFactory); channelAdapter.setBeanName("rsb-email-ca-" + emailAccountURI.getHost() + emailAccountURI.hashCode()); channelAdapter.setOutputChannel(emailDepositChannel); channelAdapter.setSource(messageSource); channelAdapter.setTrigger(trigger); channelAdapter.afterPropertiesSet(); channelAdapter.start(); getLogger().info("Started channel adapter: " + channelAdapter); channelAdapters.add(channelAdapter); } }
From source file:org.springframework.integration.mail.config.MailReceiverFactoryBean.java
private MailReceiver createReceiver() { this.verifyProtocol(); boolean isPop3 = this.protocol.toLowerCase().startsWith("pop3"); boolean isImap = this.protocol.toLowerCase().startsWith("imap"); Assert.isTrue(isPop3 || isImap, "the store URI must begin with 'pop3' or 'imap'"); AbstractMailReceiver receiver = isPop3 ? new Pop3MailReceiver(this.storeUri) : new ImapMailReceiver(this.storeUri); if (this.session != null) { Assert.isNull(this.javaMailProperties, "JavaMail Properties are not allowed when a Session has been provided."); Assert.isNull(this.authenticator, "A JavaMail Authenticator is not allowed when a Session has been provied."); receiver.setSession(this.session); }/*ww w . j a va 2 s. c om*/ if (this.searchTermStrategy != null) { Assert.isTrue(isImap, "searchTermStrategy is only allowed with imap"); ((ImapMailReceiver) receiver).setSearchTermStrategy(this.searchTermStrategy); } if (this.javaMailProperties != null) { receiver.setJavaMailProperties(this.javaMailProperties); } if (this.authenticator != null) { receiver.setJavaMailAuthenticator(this.authenticator); } if (this.shouldDeleteMessages != null) { // always set the value if configured explicitly // otherwise, the default is true for POP3 but false for IMAP receiver.setShouldDeleteMessages(this.shouldDeleteMessages); } receiver.setMaxFetchSize(this.maxFetchSize); receiver.setSelectorExpression(selectorExpression); if (isPop3) { if (this.isShouldMarkMessagesAsRead() && this.logger.isWarnEnabled()) { logger.warn("Setting 'should-mark-messages-as-read' to 'true' while using POP3 has no effect"); } } else if (isImap) { ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(this.shouldMarkMessagesAsRead); } if (this.beanFactory != null) { receiver.setBeanFactory(this.beanFactory); } receiver.afterPropertiesSet(); return receiver; }
From source file:org.springframework.integration.mail.ImapMailReceiverTests.java
@Test public void receiveMarkAsReadAndDelete() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(true); receiver.setShouldDeleteMessages(true); receiver = spy(receiver);/* www . ja v a 2s .c o m*/ receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER)); folderField.set(receiver, folder); Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); final Message[] messages = new Message[] { msg1, msg2 }; willAnswer(invocation -> { DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); if (folderOpenMode != Folder.READ_WRITE) { throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); } return null; }).given(receiver).openFolder(); willAnswer(invocation -> messages).given(receiver).searchForNewMessages(); willAnswer(invocation -> null).given(receiver).fetchMessages(messages); receiver.receive(); verify(msg1, times(1)).setFlag(Flag.SEEN, true); verify(msg2, times(1)).setFlag(Flag.SEEN, true); verify(receiver, times(1)).deleteMessages((Message[]) Mockito.any()); }
From source file:org.springframework.integration.mail.ImapMailReceiverTests.java
@Test public void receiveAndDontMarkAsReadButDelete() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); receiver.setShouldDeleteMessages(true); ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(false); receiver = spy(receiver);//from w w w . j a v a 2s . co m receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER)); folderField.set(receiver, folder); Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); final Message[] messages = new Message[] { msg1, msg2 }; willAnswer(invocation -> { DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock()); int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode"); if (folderOpenMode != Folder.READ_WRITE) { throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode"); } return null; }).given(receiver).openFolder(); willAnswer(invocation -> messages).given(receiver).searchForNewMessages(); willAnswer(invocation -> null).given(receiver).fetchMessages(messages); receiver.afterPropertiesSet(); receiver.receive(); verify(msg1, times(0)).setFlag(Flag.SEEN, true); verify(msg2, times(0)).setFlag(Flag.SEEN, true); verify(msg1, times(1)).setFlag(Flag.DELETED, true); verify(msg2, times(1)).setFlag(Flag.DELETED, true); }