diff --git a/org.springframework.integration.adapter/.classpath b/org.springframework.integration.adapter/.classpath
index b3fa2c313c..869134428b 100644
--- a/org.springframework.integration.adapter/.classpath
+++ b/org.springframework.integration.adapter/.classpath
@@ -6,7 +6,7 @@
-
+
diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java
index fbbacb3e29..bb47448047 100644
--- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java
+++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/mail/AbstractMailHeaderMapper.java
@@ -125,15 +125,15 @@ public abstract class AbstractMailHeaderMapper implements MessageHeaderMapper mapToMessageHeaders(MimeMessage mailMessage) {
try {
Map headers = new HashMap();
- headers.put(MailAttributeKeys.FROM, toStringArray(mailMessage.getFrom()));
- headers.put(MailAttributeKeys.BCC, toStringArray(mailMessage.getRecipients(RecipientType.BCC)));
- headers.put(MailAttributeKeys.CC, toStringArray(mailMessage.getRecipients(RecipientType.CC)));
- headers.put(MailAttributeKeys.TO, toStringArray(mailMessage.getRecipients(RecipientType.TO)));
- headers.put(MailAttributeKeys.REPLY_TO, toStringArray(mailMessage.getReplyTo()));
+ headers.put(MailAttributeKeys.FROM, convertToString(mailMessage.getFrom()));
+ headers.put(MailAttributeKeys.BCC, convertToStringArray(mailMessage.getRecipients(RecipientType.BCC)));
+ headers.put(MailAttributeKeys.CC, convertToStringArray(mailMessage.getRecipients(RecipientType.CC)));
+ headers.put(MailAttributeKeys.TO, convertToStringArray(mailMessage.getRecipients(RecipientType.TO)));
+ headers.put(MailAttributeKeys.REPLY_TO, convertToString(mailMessage.getReplyTo()));
headers.put(MailAttributeKeys.SUBJECT, mailMessage.getSubject());
return headers;
}
@@ -142,7 +142,6 @@ public abstract class AbstractMailHeaderMapper implements MessageHeaderMapper headers = mapper.mapToMessageHeaders(mailMessageMock);
+ Object fromHeader = headers.get(MailAttributeKeys.FROM);
+ assertNotNull(fromHeader);
+ assertTrue(fromHeader instanceof String);
+ assertEquals("from@example.org", fromHeader);
+ }
+
+ @Test
+ public void mapExactlyOneReplyToAttributeFromMimeMessage() throws MessagingException {
+ DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper();
+ MimeMessage mailMessageMock = EasyMock.createMock(MimeMessage.class);
+ Address[] replyToAddresses = new Address[] { new InternetAddress("replyTo@example.org") };
+ EasyMock.expect(mailMessageMock.getFrom()).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getRecipients(RecipientType.BCC)).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getRecipients(RecipientType.CC)).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getRecipients(RecipientType.TO)).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getReplyTo()).andReturn(replyToAddresses);
+ EasyMock.expect(mailMessageMock.getSubject()).andReturn("mail test");
+ EasyMock.replay(mailMessageMock);
+ Map headers = mapper.mapToMessageHeaders(mailMessageMock);
+ Object replyToHeader = headers.get(MailAttributeKeys.REPLY_TO);
+ assertNotNull(replyToHeader);
+ assertTrue(replyToHeader instanceof String);
+ assertEquals("replyTo@example.org", replyToHeader);
+ }
+
+ @Test
+ public void mapMultipleToAttributesFromMimeMessage() throws MessagingException {
+ DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper();
+ MimeMessage mailMessageMock = EasyMock.createMock(MimeMessage.class);
+ Address[] toAddresses = new Address[] {
+ new InternetAddress("a@example.org"), new InternetAddress("b@example.org"), new InternetAddress("c@example.org")
+ };
+ EasyMock.expect(mailMessageMock.getFrom()).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getRecipients(RecipientType.BCC)).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getRecipients(RecipientType.CC)).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getRecipients(RecipientType.TO)).andReturn(toAddresses);
+ EasyMock.expect(mailMessageMock.getReplyTo()).andReturn(new Address[0]);
+ EasyMock.expect(mailMessageMock.getSubject()).andReturn("mail test");
+ EasyMock.replay(mailMessageMock);
+ Map headers = mapper.mapToMessageHeaders(mailMessageMock);
+ Object toHeader = headers.get(MailAttributeKeys.TO);
+ assertNotNull(toHeader);
+ assertTrue(toHeader instanceof String[]);
+ String[] addresses = (String[]) toHeader;
+ assertTrue(ObjectUtils.containsElement(addresses, "a@example.org"));
+ assertTrue(ObjectUtils.containsElement(addresses, "b@example.org"));
+ assertTrue(ObjectUtils.containsElement(addresses, "c@example.org"));
+ }
+
+ @Test
+ public void mapReplyToValueFromHeadersToMimeMessage() throws MessagingException {
+ DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper();
+ Map headerMap = new HashMap();
+ headerMap.put(MailAttributeKeys.REPLY_TO, "replyTo@example.org");
+ MessageHeaders headers = new MessageHeaders(headerMap);
+ MimeMessage mailMessageMock = EasyMock.createNiceMock(MimeMessage.class);
+ EasyMock.replay(mailMessageMock);
+ MimeMessage mimeMessage = new MimeMessage(mailMessageMock);
+ mapper.mapFromMessageHeaders(headers, mimeMessage);
+ Address[] replyToAddresses = mimeMessage.getReplyTo();
+ assertEquals(1, replyToAddresses.length);
+ assertEquals("replyTo@example.org", replyToAddresses[0].toString());
+ }
+
+ @Test
+ public void mapFromValueFromHeadersToMimeMessage() throws MessagingException {
+ DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper();
+ Map headerMap = new HashMap();
+ headerMap.put(MailAttributeKeys.FROM, "from@example.org");
+ MessageHeaders headers = new MessageHeaders(headerMap);
+ MimeMessage mailMessageMock = EasyMock.createNiceMock(MimeMessage.class);
+ EasyMock.replay(mailMessageMock);
+ MimeMessage mimeMessage = new MimeMessage(mailMessageMock);
+ mapper.mapFromMessageHeaders(headers, mimeMessage);
+ Address[] fromAddresses = mimeMessage.getFrom();
+ assertEquals(1, fromAddresses.length);
+ assertEquals("from@example.org", fromAddresses[0].toString());
+ }
+
+ @Test
+ public void mapMultileToValuesFromHeadersToMimeMessage() throws MessagingException {
+ DefaultMailMessageHeaderMapper mapper = new DefaultMailMessageHeaderMapper();
+ Map headerMap = new HashMap();
+ String[] addressStrings = new String[] { "a@example.org", "b@example.org", "c@example.org" };
+ headerMap.put(MailAttributeKeys.TO, addressStrings);
+ MessageHeaders headers = new MessageHeaders(headerMap);
+ MimeMessage mailMessageMock = EasyMock.createNiceMock(MimeMessage.class);
+ EasyMock.replay(mailMessageMock);
+ MimeMessage mimeMessage = new MimeMessage(mailMessageMock);
+ mapper.mapFromMessageHeaders(headers, mimeMessage);
+ Address[] toAddresses = mimeMessage.getRecipients(RecipientType.TO);
+ assertEquals(3, toAddresses.length);
+ assertTrue(ObjectUtils.containsElement(toAddresses, new InternetAddress("a@example.org")));
+ assertTrue(ObjectUtils.containsElement(toAddresses, new InternetAddress("b@example.org")));
+ assertTrue(ObjectUtils.containsElement(toAddresses, new InternetAddress("c@example.org")));
+ }
+
+}