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.

This commit is contained in:
Mark Fisher
2009-09-04 19:54:26 +00:00
parent e07b3b031c
commit 44b682b3ba

View File

@@ -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<byte[]>) 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);