INT-3994: Add Option to Map MimeMessage
JIRA: https://jira.spring.io/browse/INT-3994 If a header mapper is injected into the mail receiver, a mapped message is result instead of a message with the raw `MimeMessage`. `MimeMessage` properties are mapped as discrete headers; in addition the raw email headers are provided as a multivalue map in the headers. Handle Multipart Since a Multipart content has a reference to the original MimeMessage, convert to a simple byte[] by default. Add an option in case the user wants to map the message but still interpret the Multipart intact. Namespace and Docs Polishing Polishing - PR Comments
This commit is contained in:
committed by
Artem Bilan
parent
8df487c96f
commit
439559f255
@@ -16,10 +16,13 @@
|
||||
|
||||
package org.springframework.integration.mail;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.instanceOf;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -29,7 +32,7 @@ import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.OutputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
@@ -80,15 +83,15 @@ import org.springframework.integration.history.MessageHistory;
|
||||
import org.springframework.integration.mail.ImapIdleChannelAdapter.ImapIdleExceptionEvent;
|
||||
import org.springframework.integration.mail.PoorMansMailServer.ImapServer;
|
||||
import org.springframework.integration.mail.config.ImapIdleChannelAdapterParserTests;
|
||||
import org.springframework.integration.mail.support.DefaultMailHeaderMapper;
|
||||
import org.springframework.integration.test.support.LongRunningIntegrationTest;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.messaging.MessageHeaders;
|
||||
import org.springframework.messaging.PollableChannel;
|
||||
import org.springframework.scheduling.TaskScheduler;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
|
||||
import com.sun.mail.imap.IMAPFolder;
|
||||
import com.sun.mail.imap.IMAPMessage;
|
||||
|
||||
/**
|
||||
* @author Oleg Zhurakousky
|
||||
@@ -136,18 +139,26 @@ public class ImapMailReceiverTests {
|
||||
}
|
||||
}
|
||||
});
|
||||
testIdleWithServerGuts(receiver);
|
||||
testIdleWithServerGuts(receiver, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIdleWithServerDefaultSearch() throws Exception {
|
||||
ImapMailReceiver receiver = new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getPort()
|
||||
+ "/INBOX");
|
||||
testIdleWithServerGuts(receiver);
|
||||
testIdleWithServerGuts(receiver, false);
|
||||
assertTrue(imapIdleServer.assertReceived("searchWithUserFlag"));
|
||||
}
|
||||
|
||||
public void testIdleWithServerGuts(ImapMailReceiver receiver) throws MessagingException {
|
||||
@Test
|
||||
public void testIdleWithMessageMapping() throws Exception {
|
||||
ImapMailReceiver receiver = new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getPort()
|
||||
+ "/INBOX");
|
||||
receiver.setHeaderMapper(new DefaultMailHeaderMapper());
|
||||
testIdleWithServerGuts(receiver, true);
|
||||
}
|
||||
|
||||
public void testIdleWithServerGuts(ImapMailReceiver receiver, boolean mapped) throws MessagingException {
|
||||
imapIdleServer.resetServer();
|
||||
Properties mailProps = new Properties();
|
||||
mailProps.put("mail.debug", "true");
|
||||
@@ -168,12 +179,23 @@ public class ImapMailReceiverTests {
|
||||
adapter.setOutputChannel(channel);
|
||||
adapter.setTaskScheduler(taskScheduler);
|
||||
adapter.start();
|
||||
@SuppressWarnings("unchecked")
|
||||
org.springframework.messaging.Message<MimeMessage> received =
|
||||
(org.springframework.messaging.Message<MimeMessage>) channel.receive(10000);
|
||||
assertNotNull(received);
|
||||
assertNotNull(received.getPayload().getReceivedDate());
|
||||
assertTrue(received.getPayload().getLineCount() > -1);
|
||||
if (!mapped) {
|
||||
@SuppressWarnings("unchecked")
|
||||
org.springframework.messaging.Message<MimeMessage> received =
|
||||
(org.springframework.messaging.Message<MimeMessage>) channel.receive(10000);
|
||||
assertNotNull(received);
|
||||
assertNotNull(received.getPayload().getReceivedDate());
|
||||
assertTrue(received.getPayload().getLineCount() > -1);
|
||||
}
|
||||
else {
|
||||
org.springframework.messaging.Message<?> received = channel.receive(10000);
|
||||
assertNotNull(received);
|
||||
assertNotNull(received.getHeaders().get(MailHeaders.RAW_HEADERS));
|
||||
assertThat((String) received.getHeaders().get(MailHeaders.CONTENT_TYPE),
|
||||
equalTo("TEXT/PLAIN; charset=ISO-8859-1"));
|
||||
assertThat((String) received.getHeaders().get(MessageHeaders.CONTENT_TYPE),
|
||||
equalTo("TEXT/PLAIN; charset=ISO-8859-1"));
|
||||
}
|
||||
assertNotNull(channel.receive(10000)); // new message after idle
|
||||
assertNull(channel.receive(10000)); // no new message after second and third idle
|
||||
verify(logger).debug("Canceling IDLE");
|
||||
@@ -838,12 +860,52 @@ public class ImapMailReceiverTests {
|
||||
@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();
|
||||
assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
|
||||
assertEquals("foo", ((Multipart) content).getBodyPart(1).getContent().toString().trim());
|
||||
|
||||
assertSame(folder, messages[0].getFolder());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAttachmentsWithMappingMultiAsBytes() throws Exception {
|
||||
final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
|
||||
receiver.setHeaderMapper(new DefaultMailHeaderMapper());
|
||||
testAttachmentsGuts(receiver);
|
||||
org.springframework.messaging.Message<?>[] messages = (org.springframework.messaging.Message<?>[]) receiver
|
||||
.receive();
|
||||
org.springframework.messaging.Message<?> received = messages[0];
|
||||
Object content = received.getPayload();
|
||||
assertThat(content, instanceOf(byte[].class));
|
||||
assertThat((String) received.getHeaders().get(MailHeaders.CONTENT_TYPE),
|
||||
equalTo("multipart/mixed;\r\n boundary=\"------------040903000701040401040200\""));
|
||||
assertThat((String) received.getHeaders().get(MessageHeaders.CONTENT_TYPE),
|
||||
equalTo("application/octet-stream"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAttachmentsWithMapping() throws Exception {
|
||||
final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
|
||||
receiver.setHeaderMapper(new DefaultMailHeaderMapper());
|
||||
receiver.setEmbeddedPartsAsBytes(false);
|
||||
testAttachmentsGuts(receiver);
|
||||
org.springframework.messaging.Message<?>[] messages = (org.springframework.messaging.Message<?>[]) receiver
|
||||
.receive();
|
||||
Object content = messages[0].getPayload();
|
||||
assertThat(content, instanceOf(Multipart.class));
|
||||
assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
|
||||
assertEquals("foo", ((Multipart) content).getBodyPart(1).getContent().toString().trim());
|
||||
}
|
||||
|
||||
private Folder testAttachmentsGuts(final ImapMailReceiver receiver) throws MessagingException, IOException {
|
||||
Store store = mock(Store.class);
|
||||
Folder folder = mock(Folder.class);
|
||||
when(folder.exists()).thenReturn(true);
|
||||
when(folder.isOpen()).thenReturn(true);
|
||||
|
||||
IMAPMessage message = mock(IMAPMessage.class);
|
||||
Message message = new MimeMessage(null, new ClassPathResource("test.mail").getInputStream());
|
||||
when(folder.search((SearchTerm) Mockito.any())).thenReturn(new Message[]{message});
|
||||
when(store.getFolder(Mockito.any(URLName.class))).thenReturn(folder);
|
||||
when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
|
||||
@@ -852,20 +914,7 @@ public class ImapMailReceiverTests {
|
||||
receiver.setBeanFactory(mock(BeanFactory.class));
|
||||
receiver.afterPropertiesSet();
|
||||
|
||||
doAnswer(new Answer<Object>() {
|
||||
|
||||
@Override
|
||||
public Object answer(InvocationOnMock invocation) throws Throwable {
|
||||
OutputStream os = (OutputStream) invocation.getArguments()[0];
|
||||
FileCopyUtils.copy(new ClassPathResource("test.mail").getInputStream(), os);
|
||||
return null;
|
||||
}
|
||||
}).when(message).writeTo(Mockito.any(OutputStream.class));
|
||||
Message[] messages = receiver.receive();
|
||||
Object content = messages[0].getContent();
|
||||
assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
|
||||
|
||||
assertSame(folder, messages[0].getFolder());
|
||||
return folder;
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -922,10 +971,10 @@ public class ImapMailReceiverTests {
|
||||
|
||||
}
|
||||
ImapMailReceiver receiver = new TestReceiver();
|
||||
Message[] received = receiver.receive();
|
||||
Message[] received = (Message[]) receiver.receive();
|
||||
assertEquals(1, received.length);
|
||||
assertSame(message1, received[0]);
|
||||
received = receiver.receive();
|
||||
received = (Message[]) receiver.receive();
|
||||
assertEquals(1, received.length);
|
||||
assertSame(messages2, received);
|
||||
assertSame(message2, received[0]);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -60,6 +60,7 @@ public class MailReceivingMessageSourceTests {
|
||||
|
||||
private final ConcurrentLinkedQueue<javax.mail.Message[]> messages = new ConcurrentLinkedQueue<javax.mail.Message[]>();
|
||||
|
||||
@Override
|
||||
public javax.mail.Message[] receive() {
|
||||
return messages.poll();
|
||||
}
|
||||
@@ -74,16 +75,6 @@ public class MailReceivingMessageSourceTests {
|
||||
public void stop() {
|
||||
}
|
||||
|
||||
public MailReceiverContext getTransactionContext() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void closeContextAfterSuccess(MailReceiverContext context) {
|
||||
}
|
||||
|
||||
public void closeContextAfterFailure(MailReceiverContext context) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,13 +16,7 @@
|
||||
|
||||
package org.springframework.integration.mail;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
import javax.mail.Folder;
|
||||
|
||||
import org.springframework.integration.mail.MailReceiver.MailReceiverContext;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.mail.SimpleMailMessage;
|
||||
import org.springframework.messaging.Message;
|
||||
|
||||
@@ -77,13 +71,4 @@ public class MailTestsHelper {
|
||||
.build();
|
||||
}
|
||||
|
||||
public static MailReceiverContext setupContextHolder(AbstractMailReceiver receiver) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ThreadLocal<MailReceiverContext> contextHolder = TestUtils.getPropertyValue(receiver, "contextHolder", ThreadLocal.class);
|
||||
Folder folder = mock(Folder.class);
|
||||
MailReceiverContext context = new MailReceiverContext(folder);
|
||||
contextHolder.set(context);
|
||||
return context;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -35,8 +35,12 @@
|
||||
store-uri="imap:foo"
|
||||
channel="channel"
|
||||
auto-startup="false"
|
||||
header-mapper="mapper"
|
||||
embedded-parts-as-bytes="false"
|
||||
should-delete-messages="true"/>
|
||||
|
||||
<bean id="mapper" class="org.springframework.integration.mail.support.DefaultMailHeaderMapper" />
|
||||
|
||||
<mail:imap-idle-channel-adapter id="simpleAdapterWithErrorChannel"
|
||||
store-uri="imap:foo"
|
||||
channel="channel"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -40,6 +40,7 @@ import org.springframework.integration.mail.ImapMailReceiver;
|
||||
import org.springframework.integration.mail.SearchTermStrategy;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.messaging.MessageChannel;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@@ -51,6 +52,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration
|
||||
@DirtiesContext
|
||||
public class ImapIdleChannelAdapterParserTests {
|
||||
|
||||
@Autowired
|
||||
@@ -82,7 +84,10 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead"));
|
||||
assertNull(adapterAccessor.getPropertyValue("errorChannel"));
|
||||
assertNull(adapterAccessor.getPropertyValue("adviceChain"));
|
||||
assertEquals(Boolean.FALSE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
|
||||
assertNotNull(receiverAccessor.getPropertyValue("headerMapper"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void simpleAdapterWithErrorChannel() {
|
||||
Object adapter = context.getBean("simpleAdapterWithErrorChannel");
|
||||
@@ -102,7 +107,10 @@ public class ImapIdleChannelAdapterParserTests {
|
||||
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("shouldDeleteMessages"));
|
||||
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead"));
|
||||
assertSame(context.getBean("errorChannel"), adapterAccessor.getPropertyValue("errorChannel"));
|
||||
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
|
||||
assertNull(receiverAccessor.getPropertyValue("headerMapper"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void simpleAdapterWithMarkeMessagesAsRead() {
|
||||
Object adapter = context.getBean("simpleAdapterMarkAsRead");
|
||||
|
||||
@@ -13,14 +13,24 @@
|
||||
|
||||
<!-- INT-982 -->
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrue" store-uri="pop3:test" channel="testChannel" should-delete-messages="true" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrue"
|
||||
store-uri="pop3:test" channel="testChannel" should-delete-messages="true"
|
||||
header-mapper="mapper" embedded-parts-as-bytes="false"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalse" store-uri="pop3:test" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalse"
|
||||
store-uri="pop3:test" channel="testChannel" should-delete-messages="false"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteTrue" store-uri="imap:test" channel="testChannel" should-delete-messages="true" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteTrue"
|
||||
store-uri="imap:test" channel="testChannel" should-delete-messages="true"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteFalse" store-uri="imap:test" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteFalse"
|
||||
store-uri="imap:test" channel="testChannel" should-delete-messages="false"
|
||||
auto-startup="false" />
|
||||
|
||||
<bean id="mapper" class="org.springframework.integration.mail.support.DefaultMailHeaderMapper" />
|
||||
|
||||
<!-- INT-1158 -->
|
||||
|
||||
@@ -31,46 +41,75 @@
|
||||
<prop key="mail.delete.false">false</prop>
|
||||
</util:properties>
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrueProperty" store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.true}" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrueProperty"
|
||||
store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.true}"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalseProperty" store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.false}" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalseProperty"
|
||||
store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.false}"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteTrueProperty" store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.true}" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteTrueProperty"
|
||||
store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.true}"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteFalseProperty" store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.false}" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapShouldDeleteFalseProperty"
|
||||
store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.false}"
|
||||
auto-startup="false" />
|
||||
|
||||
|
||||
<!-- INT-1159 -->
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3WithAuthenticator" store-uri="pop3:test" authenticator="testAuthenticator" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3WithAuthenticator"
|
||||
store-uri="pop3:test" authenticator="testAuthenticator" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapWithAuthenticator" store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapWithAuthenticator"
|
||||
store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithAuthenticator" store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithAuthenticator"
|
||||
store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<bean id="testAuthenticator" class="org.springframework.integration.mail.config.InboundChannelAdapterParserTests$TestAuthenticator"/>
|
||||
<bean id="testAuthenticator"
|
||||
class="org.springframework.integration.mail.config.InboundChannelAdapterParserTests$TestAuthenticator" />
|
||||
|
||||
|
||||
<!-- INT-1160 -->
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3WithMaxFetchSize" store-uri="pop3:test" max-fetch-size="11" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3WithMaxFetchSize"
|
||||
store-uri="pop3:test" max-fetch-size="11" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3WithMaxFetchSizeFallsBackToPollerMax" store-uri="pop3:test" channel="testChannel" should-delete-messages="false" auto-startup="false">
|
||||
<si:poller max-messages-per-poll="99" fixed-rate="30000"/>
|
||||
<mail:inbound-channel-adapter
|
||||
id="pop3WithMaxFetchSizeFallsBackToPollerMax" store-uri="pop3:test"
|
||||
channel="testChannel" should-delete-messages="false" auto-startup="false">
|
||||
<si:poller max-messages-per-poll="99" fixed-rate="30000" />
|
||||
</mail:inbound-channel-adapter>
|
||||
|
||||
<mail:inbound-channel-adapter id="imapWithMaxFetchSize" store-uri="imap:test" max-fetch-size="22" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapWithMaxFetchSize"
|
||||
store-uri="imap:test" max-fetch-size="22" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithMaxFetchSize" store-uri="imap:test" max-fetch-size="33" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithMaxFetchSize"
|
||||
store-uri="imap:test" max-fetch-size="33" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
|
||||
<!-- INT-1161 -->
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3WithSession" store-uri="pop3:test" session="testSession" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3WithSession"
|
||||
store-uri="pop3:test" session="testSession" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapWithSession" store-uri="imap:test" session="testSession" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapWithSession"
|
||||
store-uri="imap:test" session="testSession" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithSession" store-uri="imap:test" session="testSession" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithSession"
|
||||
store-uri="imap:test" session="testSession" channel="testChannel"
|
||||
should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<bean id="testSession" class="javax.mail.Session" factory-method="getInstance">
|
||||
<constructor-arg>
|
||||
@@ -86,17 +125,28 @@
|
||||
|
||||
<!-- INT-1162 -->
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3WithoutStoreUri" channel="testChannel" protocol="pop3" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3WithoutStoreUri"
|
||||
channel="testChannel" protocol="pop3" should-delete-messages="false"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapWithoutStoreUri" channel="testChannel" protocol="imap" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:inbound-channel-adapter id="imapWithoutStoreUri"
|
||||
channel="testChannel" protocol="imap" should-delete-messages="false"
|
||||
auto-startup="false" />
|
||||
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithoutStoreUri" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
|
||||
<mail:imap-idle-channel-adapter id="imapIdleWithoutStoreUri"
|
||||
channel="testChannel" should-delete-messages="false" auto-startup="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadTrue" channel="testChannel" protocol="pop3" should-delete-messages="false" auto-startup="false" should-mark-messages-as-read="true"/>
|
||||
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadTrue"
|
||||
channel="testChannel" protocol="pop3" should-delete-messages="false"
|
||||
auto-startup="false" should-mark-messages-as-read="true" />
|
||||
|
||||
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadFalse" channel="testChannel" protocol="pop3" should-delete-messages="false" auto-startup="false" should-mark-messages-as-read="false"/>
|
||||
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadFalse"
|
||||
channel="testChannel" protocol="pop3" should-delete-messages="false"
|
||||
auto-startup="false" should-mark-messages-as-read="false" />
|
||||
|
||||
<mail:inbound-channel-adapter id="imapShouldMarkAsReadTrue" channel="testChannel" protocol="imap" should-delete-messages="false" auto-startup="false" should-mark-messages-as-read="true"/>
|
||||
<mail:inbound-channel-adapter id="imapShouldMarkAsReadTrue"
|
||||
channel="testChannel" protocol="imap" should-delete-messages="false"
|
||||
auto-startup="false" should-mark-messages-as-read="true" />
|
||||
|
||||
<!-- INT-2407 -->
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ import org.springframework.integration.mail.Pop3MailReceiver;
|
||||
import org.springframework.integration.mail.SearchTermStrategy;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.messaging.MessageChannel;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
@@ -56,6 +57,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
*/
|
||||
@ContextConfiguration
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@DirtiesContext
|
||||
public class InboundChannelAdapterParserTests {
|
||||
|
||||
@Autowired
|
||||
@@ -73,16 +75,22 @@ public class InboundChannelAdapterParserTests {
|
||||
public void pop3ShouldDeleteTrue() {
|
||||
AbstractMailReceiver receiver = this.getReceiver("pop3ShouldDeleteTrue");
|
||||
assertEquals(Pop3MailReceiver.class, receiver.getClass());
|
||||
Boolean value = (Boolean) new DirectFieldAccessor(receiver).getPropertyValue("shouldDeleteMessages");
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Boolean value = (Boolean) receiverAccessor.getPropertyValue("shouldDeleteMessages");
|
||||
assertTrue(value);
|
||||
assertEquals(Boolean.FALSE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
|
||||
assertNotNull(receiverAccessor.getPropertyValue("headerMapper"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void imapShouldMarkMessagesAsRead() {
|
||||
AbstractMailReceiver receiver = this.getReceiver("imapShouldMarkAsReadTrue");
|
||||
assertEquals(ImapMailReceiver.class, receiver.getClass());
|
||||
Boolean value = (Boolean) new DirectFieldAccessor(receiver).getPropertyValue("shouldMarkMessagesAsRead");
|
||||
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
|
||||
Boolean value = (Boolean) receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead");
|
||||
assertTrue(value);
|
||||
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
|
||||
assertNull(receiverAccessor.getPropertyValue("headerMapper"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user