diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/DefaultMailHeaderGenerator.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/DefaultMailHeaderGenerator.java new file mode 100644 index 0000000000..0437ac5fad --- /dev/null +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/DefaultMailHeaderGenerator.java @@ -0,0 +1,77 @@ +/* + * Copyright 2002-2007 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.adapter.mail; + +import org.springframework.integration.message.Message; + +/** + * The default implementation of {@link MailHeaderGenerator}. Configures the + * {@link org.springframework.mail.MailMessage} properties based on attributes + * provided with known attribute keys as defined in {@link MailTargetAdapter}. + * + * @author Mark Fisher + */ +public class DefaultMailHeaderGenerator extends AbstractMailHeaderGenerator { + + @Override + protected String getSubject(Message message) { + return this.retrieveAsString(message, MailTargetAdapter.SUBJECT); + } + + @Override + protected String[] getTo(Message message) { + return this.retrieveAsStringArray(message, MailTargetAdapter.TO); + } + + @Override + protected String[] getCc(Message message) { + return this.retrieveAsStringArray(message, MailTargetAdapter.CC); + } + + @Override + protected String[] getBcc(Message message) { + return this.retrieveAsStringArray(message, MailTargetAdapter.BCC); + } + + @Override + protected String getFrom(Message message) { + return this.retrieveAsString(message, MailTargetAdapter.FROM); + } + + @Override + protected String getReplyTo(Message message) { + return this.retrieveAsString(message, MailTargetAdapter.REPLY_TO); + } + + + private String retrieveAsString(Message message, String key) { + Object value = message.getHeader().getAttribute(key); + return (value instanceof String) ? (String) value : null; + } + + private String[] retrieveAsStringArray(Message message, String key) { + Object value = message.getHeader().getAttribute(key); + if (value instanceof String[]) { + return (String[]) value; + } + if (value instanceof String) { + return new String[] { (String) value }; + } + return null; + } + +} diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/MailTargetAdapter.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/MailTargetAdapter.java index 764411a282..a4902cd9b4 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/MailTargetAdapter.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/mail/MailTargetAdapter.java @@ -35,9 +35,22 @@ import org.springframework.util.Assert; */ public class MailTargetAdapter implements MessageHandler, InitializingBean { - private volatile JavaMailSender mailSender; + public static final String SUBJECT = "_mail.SUBJECT"; - private volatile MailHeaderGenerator mailHeaderGenerator; + public static final String TO = "_mail.TO"; + + public static final String CC = "_mail.CC"; + + public static final String BCC = "_mail.BCC"; + + public static final String FROM = "_mail.FROM"; + + public static final String REPLY_TO = "_mail.REPLY_TO"; + + + private final JavaMailSender mailSender; + + private volatile MailHeaderGenerator mailHeaderGenerator = new DefaultMailHeaderGenerator(); private volatile MessageMapper textMessageMapper; @@ -46,9 +59,19 @@ public class MailTargetAdapter implements MessageHandler, InitializingBean { private volatile MessageMapper objectMessageMapper; + /** + * Create a MailTargetAdapter. + * + * @param mailSender the {@link JavaMailSender} instance to which this + * adapter will delegate. + */ + public MailTargetAdapter(JavaMailSender mailSender) { + Assert.notNull(mailSender, "'mailSender' must not be null"); + this.mailSender = mailSender; + } + + public void afterPropertiesSet() throws Exception { - Assert.notNull(this.mailSender, "'mailSender' must not be null"); - Assert.notNull(this.mailHeaderGenerator, "'mailHeaderGenerator' must not be null"); this.textMessageMapper = (this.textMessageMapper != null) ? this.textMessageMapper : new TextMailMessageMapper(); this.byteArrayMessageMapper = (byteArrayMessageMapper != null) ? @@ -57,11 +80,6 @@ public class MailTargetAdapter implements MessageHandler, InitializingBean { this.objectMessageMapper : new DefaultObjectMailMessageMapper(); } - public void setMailSender(JavaMailSender mailSender) { - Assert.notNull(mailSender, "'mailSender' must not be null"); - this.mailSender = mailSender; - } - public void setHeaderGenerator(MailHeaderGenerator mailHeaderGenerator) { Assert.notNull(mailHeaderGenerator, "'mailHeaderGenerator' must not be null"); this.mailHeaderGenerator = mailHeaderGenerator; diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/MailTargetAdapterTests.java b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/MailTargetAdapterTests.java index 1cbae13131..074b862def 100644 --- a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/MailTargetAdapterTests.java +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/mail/MailTargetAdapterTests.java @@ -57,8 +57,7 @@ public class MailTargetAdapterTests { mailHeaderGenerator.setReplyTo(MailTestsHelper.REPLY_TO); mailHeaderGenerator.setSubject(MailTestsHelper.SUBJECT); mailHeaderGenerator.setTo(MailTestsHelper.TO); - this.mailTargetAdapter = new MailTargetAdapter(); - this.mailTargetAdapter.setMailSender(this.mailSender); + this.mailTargetAdapter = new MailTargetAdapter(this.mailSender); this.mailTargetAdapter.setHeaderGenerator(mailHeaderGenerator); this.mailTargetAdapter.afterPropertiesSet(); }