From 44b682b3badc5b200e8da7e52e09da1f06812a64 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Fri, 4 Sep 2009 19:54:26 +0000 Subject: [PATCH] INT-760 MessageHeaders for Mail (to, cc, etc, as defined in MailHeaders) are now applied to MailMessage payload instances also (in addition to String or byte[] payloads). Previously they were ignored since it was assumed that a MailMessage would have been completely configured, but this seems more intuitive if someone does explicitly add a 'header-enricher' with settings that should add or override. Otherwise, the header-enricher would simply be left out of the configuration or message flow. --- .../mail/MailSendingMessageHandler.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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 b710fdb09d..9a36a5055c 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 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. @@ -31,6 +31,7 @@ import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMailMessage; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; /** @@ -80,11 +81,11 @@ public class MailSendingMessageHandler implements MessageHandler { @SuppressWarnings("unchecked") private MailMessage convertMessageToMailMessage(Message message) { - if (message.getPayload() instanceof MailMessage) { - return (MailMessage) message.getPayload(); - } MailMessage mailMessage = null; - if (message.getPayload() instanceof byte[]) { + if (message.getPayload() instanceof MailMessage) { + mailMessage = (MailMessage) message.getPayload(); + } + else if (message.getPayload() instanceof byte[]) { mailMessage = this.createMailMessageFromByteArrayMessage((Message) message); } else if (message.getPayload() instanceof String) { @@ -114,7 +115,8 @@ public class MailSendingMessageHandler implements MessageHandler { MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, multipartMode); helper.addAttachment(attachmentFileName, new ByteArrayResource(message.getPayload())); return new MimeMailMessage(helper); - } catch (MessagingException e) { + } + catch (MessagingException e) { throw new MessageMappingException(message, "failed to create MimeMessage", e); } } @@ -125,8 +127,11 @@ public class MailSendingMessageHandler implements MessageHandler { mailMessage.setSubject(subject); } String[] to = this.retrieveHeaderValueAsStringArray(headers, MailHeaders.TO); - Assert.state(to != null, "no value available for the 'MailHeaders.TO' header"); 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."); + } String[] cc = this.retrieveHeaderValueAsStringArray(headers, MailHeaders.CC); if (cc != null) { mailMessage.setCc(cc);