/** * Most of the code in the Qalingo project is copyrighted Hoteia and licensed * under the Apache License Version 2.0 (release version 0.8.0) * http://www.apache.org/licenses/LICENSE-2.0 * * Copyright (c) Hoteia, 2012-2014 * http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com * */ package org.hoteia.qalingo.core.util.impl; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import org.apache.commons.lang.StringUtils; import org.springframework.mail.javamail.MimeMessagePreparator; public class MimeMessagePreparatorImpl implements MimeMessagePreparator, Serializable { /** * */ private static final long serialVersionUID = 745699901105995036L; private String from; private String fromName; private String to; private String cc; private String bcc; private String replyTo; private String subject; private String plainTextContent; private String htmlContent; private String unsubscribeUrlOrEmail; private boolean mirroringActivated; private String mirroringFilePath; public String getFrom() { return this.from; } public void setFrom(String from) { this.from = from; } public String getFromName() { return fromName; } public void setFromName(String fromName) { this.fromName = fromName; } public String getTo() { return this.to; } public void setTo(String to) { this.to = to; } public String getCc() { return this.cc; } public void setCc(String cc) { this.cc = cc; } public String getBcc() { return bcc; } public void setBcc(String bcc) { this.bcc = bcc; } public String getReplyTo() { return this.replyTo; } public void setReplyTo(String replyTo) { this.replyTo = replyTo; } public String getSubject() { return this.subject; } public void setSubject(String subject) { this.subject = subject; } public String getPlainTextContent() { return this.plainTextContent; } public void setPlainTextContent(String plainTextContent) { this.plainTextContent = plainTextContent; } public String getHtmlContent() { return this.htmlContent; } public void setHtmlContent(String htmlContent) { this.htmlContent = htmlContent; } public String getUnsubscribeUrlOrEmail() { return unsubscribeUrlOrEmail; } public void setUnsubscribeUrlOrEmail(String unsubscribeUrlOrEmail) { this.unsubscribeUrlOrEmail = unsubscribeUrlOrEmail; } public boolean isMirroringActivated() { return mirroringActivated; } public void setMirroringActivated(boolean mirroringActivated) { this.mirroringActivated = mirroringActivated; } public String getMirroringFilePath() { return mirroringFilePath; } public void setMirroringFilePath(String mirroringFolderPath) { this.mirroringFilePath = mirroringFolderPath; } public void prepare(MimeMessage message) throws Exception { message.addHeader("List-Unsubscribe", "<" + getUnsubscribeUrlOrEmail() + ">"); // AUTO unsubscribe for Gmail/Hotmail etc : RFC2369 if (StringUtils.isNotEmpty(getUnsubscribeUrlOrEmail())) { message.addHeader("List-Unsubscribe", "<" + getUnsubscribeUrlOrEmail() + ">"); } if (getFrom() != null) { List<InternetAddress> toAddress = new ArrayList<InternetAddress>(); toAddress.add(new InternetAddress(getFrom(), getFromName())); message.addFrom(toAddress.toArray(new InternetAddress[toAddress.size()])); } if (getTo() != null) { message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(getTo())); } if (getCc() != null) { message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(getCc())); } if (getBcc() != null) { message.addRecipients(Message.RecipientType.BCC, InternetAddress.parse(getBcc())); } if (getSubject() != null) { message.setSubject(getSubject()); } MimeMultipart mimeMultipart = new MimeMultipart("alternative");// multipart/mixed or mixed or related or alternative message.setContent(mimeMultipart); if (getPlainTextContent() != null) { BodyPart textBodyPart = new MimeBodyPart(); textBodyPart.setHeader("Content-Type", "text/plain; charset=\"UTF-8\""); textBodyPart.setHeader("Content-Transfer-Encoding", "base64"); textBodyPart.setContent(getPlainTextContent(), "text/plain; charset=\"UTF-8\""); mimeMultipart.addBodyPart(textBodyPart); } if (getHtmlContent() != null) { BodyPart htmlBodyPart = new MimeBodyPart(); htmlBodyPart.setHeader("Content-Type", "text/html; charset=\"UTF-8\""); htmlBodyPart.setHeader("Content-Transfer-Encoding", "base64"); htmlBodyPart.setContent(getHtmlContent(), "text/html; charset=\"UTF-8\""); mimeMultipart.addBodyPart(htmlBodyPart); } } }