use of jakarta.mail.Folder in project spring-integration by spring-projects.
the class ImapMailReceiverTests method receiveMarkAsReadAndDelete.
@Test
public void receiveMarkAsReadAndDelete() throws Exception {
AbstractMailReceiver receiver = new ImapMailReceiver();
((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(true);
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);
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(1)).deleteMessages(Mockito.any());
}
use of jakarta.mail.Folder in project spring-integration by spring-projects.
the class ImapMailReceiverTests method receiveAndDontMarkAsReadButDelete.
@Test
public void receiveAndDontMarkAsReadButDelete() throws Exception {
AbstractMailReceiver receiver = new ImapMailReceiver();
receiver.setShouldDeleteMessages(true);
((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 -> {
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.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);
}
use of jakarta.mail.Folder in project spring-integration by spring-projects.
the class ImapMailReceiverTests method receiveAndIgnoreMarkAsReadDontDelete.
@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());
}
use of jakarta.mail.Folder in project spring-integration by spring-projects.
the class ImapMailReceiverTests method testAttachments.
@Test
public void testAttachments() throws Exception {
final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
Folder folder = testAttachmentsGuts(receiver);
Message[] messages = (Message[]) receiver.receive();
Object content = messages[0].getContent();
assertThat(((Multipart) content).getBodyPart(0).getContent().toString().trim()).isEqualTo("bar");
assertThat(((Multipart) content).getBodyPart(1).getContent().toString().trim()).isEqualTo("foo");
assertThat(messages[0].getFolder()).isSameAs(folder);
}
use of jakarta.mail.Folder in project spring-integration by spring-projects.
the class ImapMailReceiver method waitForNewMessages.
/**
* This method is unique to the IMAP receiver and only works if IMAP IDLE
* is supported (see RFC 2177 for more detail).
* @throws MessagingException Any MessagingException.
*/
public void waitForNewMessages() throws MessagingException {
openFolder();
Folder folder = getFolder();
Assert.state(folder instanceof IMAPFolder, () -> "folder is not an instance of [" + IMAPFolder.class.getName() + "]");
IMAPFolder imapFolder = (IMAPFolder) folder;
if (imapFolder.hasNewMessages()) {
return;
} else if (!folder.getPermanentFlags().contains(Flags.Flag.RECENT) && searchForNewMessages().length > 0) {
return;
}
try {
this.pingTask = this.scheduler.schedule(this.idleCanceler, new Date(System.currentTimeMillis() + this.cancelIdleInterval));
if (imapFolder.isOpen()) {
imapFolder.idle(true);
}
} finally {
if (this.pingTask != null) {
this.pingTask.cancel(true);
}
}
}
Aggregations