emailMessage.setFlag(Flags.Flag.DELETED, this.shouldSetDeleteFlag); } catch (MessagingException e) { this.logger.warn("Failed to set DELETE Flag on the message, data duplication may occur.");
msg.setFlag(Flags.Flag.SEEN, false);
/** * PDI-10942 - Job get emails JobEntry does not mark emails as 'read' when load emails content. * * Test that we always open remote folder in rw mode, and after email attachment is loaded email is marked as read. * Set for openFolder rw mode if this is pop3. * * @throws KettleException * @throws MessagingException */ @Test public void testFetchOneFolderModePop3() throws KettleException, MessagingException { entry.fetchOneFolder( mailConn, true, "junitImapFolder", "junitRealOutputFolder", "junitTargetAttachmentFolder", "junitRealMoveToIMAPFolder", "junitRealFilenamePattern", 0, Mockito.mock( SimpleDateFormat.class ) ); Mockito.verify( mailConn ).openFolder( true ); Mockito.verify( message ).setFlag( Flag.SEEN, true ); }
private void setMessageFlags(Message[] filteredMessages) throws MessagingException { boolean recentFlagSupported = false; Flags flags = getFolder().getPermanentFlags(); if (flags != null) { recentFlagSupported = flags.contains(Flags.Flag.RECENT); } for (Message message : filteredMessages) { if (!recentFlagSupported) { if (flags != null && flags.contains(Flags.Flag.USER)) { if (this.logger.isDebugEnabled()) { this.logger.debug("USER flags are supported by this mail server. Flagging message with '" + this.userFlag + "' user flag"); } Flags siFlags = new Flags(); siFlags.add(this.userFlag); message.setFlags(siFlags, true); } else { this.logger.debug("USER flags are not supported by this mail server. " + "Flagging message with system flag"); message.setFlag(Flags.Flag.FLAGGED, true); } } setAdditionalFlags(message); } }
/** * PDI-10942 - Job get emails JobEntry does not mark emails as 'read' when load emails content. * * Test that we always open remote folder in rw mode, and after email attachment is loaded email is marked as read. * protocol IMAP and default remote folder is overridden * * @throws KettleException * @throws MessagingException */ @Test public void testFetchOneFolderModeIMAPWithNonDefFolder() throws KettleException, MessagingException { entry.fetchOneFolder( mailConn, false, "junitImapFolder", "junitRealOutputFolder", "junitTargetAttachmentFolder", "junitRealMoveToIMAPFolder", "junitRealFilenamePattern", 0, Mockito.mock( SimpleDateFormat.class ) ); Mockito.verify( mailConn ).openFolder( "junitImapFolder", true ); Mockito.verify( message ).setFlag( Flag.SEEN, true ); }
/** * Delete current fetched message * * @throws KettleException */ public void deleteMessage() throws KettleException { try { this.message.setFlag( Flags.Flag.DELETED, true ); updateDeletedMessagesCounter(); } catch ( Exception e ) { throw new KettleException( BaseMessages.getString( PKG, "MailConnection.Error.DeletingMessage", "" + getMessage().getMessageNumber() ), e ); } }
/** * PDI-10942 - Job get emails JobEntry does not mark emails as 'read' when load emails content. * * Test that we always open remote folder in rw mode, and after email attachment is loaded email is marked as read. * protocol IMAP and default remote folder is NOT overridden * * @throws KettleException * @throws MessagingException */ @Test public void testFetchOneFolderModeIMAPWithIsDefFolder() throws KettleException, MessagingException { entry.fetchOneFolder( mailConn, false, null, "junitRealOutputFolder", "junitTargetAttachmentFolder", "junitRealMoveToIMAPFolder", "junitRealFilenamePattern", 0, Mockito.mock( SimpleDateFormat.class ) ); Mockito.verify( mailConn ).openFolder( true ); Mockito.verify( message ).setFlag( Flag.SEEN, true ); }
/** * Deletes the given messages from this receiver's folder. * @param messages the messages to delete * @throws MessagingException in case of JavaMail errors */ protected void deleteMessages(Message[] messages) throws MessagingException { for (Message message : messages) { message.setFlag(Flags.Flag.DELETED, true); } }
@Override protected void setAdditionalFlags(Message message) throws MessagingException { super.setAdditionalFlags(message); if (this.shouldMarkMessagesAsRead) { message.setFlag(Flag.SEEN, true); } }
@Test public void receiveAndMarkAsReadDontDelete() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); receiver = receiveAndMarkAsReadDontDeleteGuts(receiver, msg1, msg2); verify(msg1, times(1)).setFlag(Flag.SEEN, true); verify(msg2, times(1)).setFlag(Flag.SEEN, true); verify(receiver, times(0)).deleteMessages(Mockito.any()); }
@Test // INT-2991 Flag.SEEN was set twice when a filter is used public void receiveAndMarkAsReadDontDeletePassingFilter() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); Expression selectorExpression = new SpelExpressionParser().parseExpression("true"); receiver.setSelectorExpression(selectorExpression); receiver = receiveAndMarkAsReadDontDeleteGuts(receiver, msg1, msg2); verify(msg1, times(1)).setFlag(Flag.SEEN, true); verify(msg2, times(1)).setFlag(Flag.SEEN, true); verify(receiver, times(0)).deleteMessages(Mockito.any()); }
@Test // INT-2991 filtered messages were marked SEEN public void receiveAndMarkAsReadDontDeleteFiltered() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); Message msg1 = mock(MimeMessage.class); Message msg2 = mock(MimeMessage.class); given(msg2.getSubject()).willReturn("foo"); // should not be marked seen Expression selectorExpression = new SpelExpressionParser() .parseExpression("subject == null OR !subject.equals('foo')"); receiver.setSelectorExpression(selectorExpression); receiver = receiveAndMarkAsReadDontDeleteGuts(receiver, msg1, msg2); verify(msg1, times(1)).setFlag(Flag.SEEN, true); verify(msg2, never()).setFlag(Flag.SEEN, true); verify(receiver, times(0)).deleteMessages(Mockito.any()); }
@Test public void receiveAndDontSetDeleteWithUrl() throws Exception { AbstractMailReceiver receiver = new Pop3MailReceiver("pop3://some.host"); receiver = spy(receiver); receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); when(folder.getPermanentFlags()).thenReturn(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 }; doAnswer(invocation -> null).when(receiver).openFolder(); doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.afterPropertiesSet(); receiver.receive(); verify(msg1, times(0)).setFlag(Flag.DELETED, true); verify(msg2, times(0)).setFlag(Flag.DELETED, true); }
@Test public void receiveAndDontSetDeleteWithoutUrl() throws Exception { AbstractMailReceiver receiver = new Pop3MailReceiver(); receiver = spy(receiver); receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); when(folder.getPermanentFlags()).thenReturn(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 }; doAnswer(invocation -> null).when(receiver).openFolder(); doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.afterPropertiesSet(); receiver.receive(); verify(msg1, times(0)).setFlag(Flag.DELETED, true); verify(msg2, times(0)).setFlag(Flag.DELETED, true); }
@Test public void receiveAndDontDelete() throws Exception { AbstractMailReceiver receiver = new Pop3MailReceiver(); receiver.setShouldDeleteMessages(false); receiver = spy(receiver); receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); when(folder.getPermanentFlags()).thenReturn(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 }; doAnswer(invocation -> null).when(receiver).openFolder(); doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.afterPropertiesSet(); receiver.receive(); verify(msg1, times(0)).setFlag(Flag.DELETED, true); verify(msg2, times(0)).setFlag(Flag.DELETED, true); }
@Test public void receiveAndDelete() throws Exception { AbstractMailReceiver receiver = new Pop3MailReceiver(); receiver.setShouldDeleteMessages(true); receiver = spy(receiver); receiver.setBeanFactory(mock(BeanFactory.class)); receiver.afterPropertiesSet(); Field folderField = AbstractMailReceiver.class.getDeclaredField("folder"); folderField.setAccessible(true); Folder folder = mock(Folder.class); when(folder.getPermanentFlags()).thenReturn(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 }; doAnswer(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; }).when(receiver).openFolder(); doAnswer(invocation -> messages).when(receiver).searchForNewMessages(); doAnswer(invocation -> null).when(receiver).fetchMessages(messages); receiver.afterPropertiesSet(); receiver.receive(); verify(msg1, times(1)).setFlag(Flag.DELETED, true); verify(msg2, times(1)).setFlag(Flag.DELETED, true); }
mailConn.getMessage().setFlag( Flag.SEEN, true );
@Test public void receiveAndDontMarkAsRead() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(false); receiver = spy(receiver); 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 -> 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); }
@Test public void receiveAndIgnoreMarkAsReadDontDelete() throws Exception { AbstractMailReceiver receiver = new ImapMailReceiver(); receiver = spy(receiver); 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 = (int) 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(0)).deleteMessages(Mockito.any()); }