/*
* 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.springmodules.email.dispatcher.emailsender;
import java.util.Iterator;
import java.util.Map;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.MailSender;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springmodules.email.Attachment;
import org.springmodules.email.Email;
/**
* An email sender that know how to utilize {@link JavaMailSender} to send emails.
*
* @author Uri Boness
*/
public class JavaMailEmailSender implements EmailSender {
// not supported out of the box by spring in 2.0.3 release.
private final static String HEADER_PRIORITY = "X-Priority";
/**
* Expects a {@link org.springframework.mail.javamail.JavaMailSender} as the given mail sender.
*
* @see EmailSender#send(MailSender, Email, String)
*/
public void send(MailSender sender, Email email, String encoding) {
((JavaMailSender)sender).send(generateMimeMessagePreparator(email, encoding));
}
/**
* Creates a MimeMessagePreparator that can translate the given email to a {@link javax.mail.internet.MimeMessage}.
*
* @param email The email to be translated.
* @param encoding The encoding of the email.
* @return The appropriate MimeMessagePreparator.
*/
protected MimeMessagePreparator generateMimeMessagePreparator(final Email email, final String encoding) {
return new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
mimeMessage.setHeader(HEADER_PRIORITY, String.valueOf(email.getPriority().getRank()));
for (Iterator iter = email.getHeaders().entrySet().iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry)iter.next();
mimeMessage.setHeader(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
}
MimeMessageHelper message =
new MimeMessageHelper(mimeMessage, MimeMessageHelper.MULTIPART_MODE_RELATED, encoding);
message.setTo(email.getTo());
message.setBcc(email.getBcc());
message.setCc(email.getCc());
message.setFrom(email.getFrom());
message.setSubject(email.getSubject());
if (email.getTextBody() != null && email.getHtmlBody() != null) {
message.setText(email.getTextBody(), email.getHtmlBody());
} else {
if (email.getTextBody() != null) {
message.setText(email.getTextBody(), false);
}
if (email.getHtmlBody() != null) {
message.setText(email.getHtmlBody(), true);
}
}
if (email.getReplyTo() != null) {
message.setReplyTo(email.getReplyTo());
}
for (Iterator iter = email.getAttachments().iterator(); iter.hasNext();) {
Attachment attachment = (Attachment) iter.next();
message.addAttachment(attachment.getName(), attachment.getResource());
}
for (Iterator iter = email.getInlineAttachments().iterator(); iter.hasNext();) {
Attachment attachment = (Attachment) iter.next();
message.addInline(attachment.getName(), attachment.getResource());
}
}
};
}
}