diff --git a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java index 9a36a5055c..47647a4a9b 100644 --- a/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java +++ b/org.springframework.integration.mail/src/main/java/org/springframework/integration/mail/MailSendingMessageHandler.java @@ -47,6 +47,7 @@ import org.springframework.util.StringUtils; * * @author Marius Bogoevici * @author Mark Fisher + * @author Oleg Zhurakousky */ public class MailSendingMessageHandler implements MessageHandler { @@ -127,7 +128,9 @@ public class MailSendingMessageHandler implements MessageHandler { mailMessage.setSubject(subject); } String[] to = this.retrieveHeaderValueAsStringArray(headers, MailHeaders.TO); - mailMessage.setTo(to); + if (to != null){ + mailMessage.setTo(to); + } if (mailMessage instanceof SimpleMailMessage) { Assert.state(!ObjectUtils.isEmpty(((SimpleMailMessage) mailMessage).getTo()), "No recipient has been provided on the MailMessage or the 'MailHeaders.TO' header."); @@ -152,15 +155,18 @@ public class MailSendingMessageHandler implements MessageHandler { private String[] retrieveHeaderValueAsStringArray(MessageHeaders headers, String key) { Object value = headers.get(key); + String[] returnedHeaders = null; if (value != null) { if (value instanceof String[]) { - return (String[]) value; - } - if (value instanceof String) { - return StringUtils.commaDelimitedListToStringArray((String) value); - } + returnedHeaders = (String[]) value; + } else if (value instanceof String) { + returnedHeaders = StringUtils.commaDelimitedListToStringArray((String) value); + } } - return null; + if (returnedHeaders == null || ObjectUtils.isEmpty(returnedHeaders)){ + returnedHeaders = null; + } + return returnedHeaders; } } diff --git a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java index 41e4682869..54b749685a 100644 --- a/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java +++ b/org.springframework.integration.mail/src/test/java/org/springframework/integration/mail/MailSendingMessageHandlerTests.java @@ -30,14 +30,14 @@ import javax.mail.internet.MimeMessage; import org.junit.After; import org.junit.Before; import org.junit.Test; - import org.springframework.integration.message.MessageBuilder; import org.springframework.mail.SimpleMailMessage; /** * @author Marius Bogoevici + * @author Oleg Zhurakousky */ -public class MailSendingMessageHandlerTests { +public class MailSendingMessageHandlerTests { private MailSendingMessageHandler handler; @@ -49,7 +49,7 @@ public class MailSendingMessageHandlerTests { this.mailSender = new StubJavaMailSender(new MimeMessage((Session) null)); this.handler = new MailSendingMessageHandler(this.mailSender); } - + @After public void reset() { this.mailSender.reset(); @@ -99,5 +99,25 @@ public class MailSendingMessageHandlerTests { assertEquals("message content different from expected", mailMessage, mailSender.getSentSimpleMailMessages().get(0)); } + @Test + public void simpleMailMessage() { + SimpleMailMessage mailMessage = MailTestsHelper.createSimpleMailMessage(); + String[] toHeaders = mailMessage.getTo(); + this.handler.handleMessage(MessageBuilder.withPayload(mailMessage).build()); + assertEquals("only one simple message must be sent", + 1, mailSender.getSentSimpleMailMessages().size()); + SimpleMailMessage sentMessage = mailSender.getSentSimpleMailMessages().get(0); + assertTrue(sentMessage.getTo().equals(toHeaders)); + } + @Test + public void simpleMailMessageOverrideWithHeaders() { + SimpleMailMessage mailMessage = MailTestsHelper.createSimpleMailMessage(); + String[] toHeaders = mailMessage.getTo(); + this.handler.handleMessage(MessageBuilder.withPayload(mailMessage).setHeader(MailHeaders.TO, new String[]{"foo@bar.bam"}).build()); + assertEquals("only one simple message must be sent", + 1, mailSender.getSentSimpleMailMessages().size()); + SimpleMailMessage sentMessage = mailSender.getSentSimpleMailMessages().get(0); + assertTrue(sentMessage.getTo()[0].equals("foo@bar.bam")); + } }