package com.idega.core.messaging; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import javax.mail.MessagingException; import com.idega.core.file.util.MimeTypeUtil; import com.idega.util.ArrayUtil; import com.idega.util.FileUtil; import com.idega.util.IOUtil; import com.idega.util.SendMail; /** * <p> * Convenient and simple holder object to send an E-mail Message. * </p> * Last modified: $Date: 2009/04/22 12:51:54 $ by $Author: valdas $ * * @author <a href="mailto:tryggvil@idega.com">tryggvil</a> * @version $Revision: 1.3 $ */ public class EmailMessage extends SimpleMessage { private String senderName; private String toAddress; private String fromAddress; private String replyToAddress; private String forcedToAddress; private String ccAddress; private String bccAddress; private String mailServer; private Collection<File> attachedFiles; private boolean autoDeletedAttachments = true, parsed = false; private String mailType = MimeTypeUtil.MIME_TYPE_TEXT_PLAIN; public EmailMessage() { super(); MessagingSettings settings = getMessagingSettings(); setMailServer(settings.getSMTPMailServer()); setFromAddress(settings.getFromMailAddress()); setForcedToAddress(settings.getForcedReceiver()); } public EmailMessage(String subject, String body) { super(subject, body); } public EmailMessage(String subject, String body, String toAddress) { this(subject, body); setToAddress(toAddress); } protected EmailMessage(EmailMessage message) { this(message.getSubject(), message.getBody(), message.getToAddress()); setSenderName(message.getSenderName()); setFromAddress(message.getFromAddress()); setReplyToAddress(message.getReplyToAddress()); setForcedToAddress(message.getForcedToAddress()); setCcAddress(message.getCcAddress()); setBccAddress(message.getBccAddress()); setMailServer(message.getMailServer()); Collection<File> attachedFiles = getAttachedFiles(); if (attachedFiles != null) { setAttachedFiles(new ArrayList<File>(attachedFiles)); } } public String getFromAddress() { return fromAddress; } public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } public String getToAddress() { String forcedTo = getForcedToAddress(); if(forcedTo!=null){ return forcedTo; } return toAddress; } public void setToAddress(String toAddress) { this.toAddress = toAddress; } protected String getForcedToAddress() { return forcedToAddress; } protected void setForcedToAddress(String forcedToAddress) { this.forcedToAddress = forcedToAddress; } public void addAttachment(File attachment) { if (attachedFiles == null) { attachedFiles = new ArrayList<File>(); } attachedFiles.add(attachment); } public Collection<File> getAttachedFiles() { return attachedFiles; } public String getBccAddress() { return bccAddress; } public void setBccAddress(String bccAddress) { this.bccAddress = bccAddress; } public String getMailServer() { return mailServer; } public void setMailServer(String mailServer) { this.mailServer = mailServer; } public String getReplyToAddress() { return replyToAddress; } public void setReplyToAddress(String replyToAddress) { this.replyToAddress = replyToAddress; } public String getCcAddress() { return ccAddress; } public void setCcAddress(String ccAddress) { this.ccAddress = ccAddress; } public String getSenderName() { return senderName; } public void setSenderName(String senderName) { this.senderName = senderName; } /** * <p> * Sends the email to the receiver. * This checks if emailing is globally switched on or off and throws an exception if that's the case. * </p> * @throws MessagingException */ @Override public void send() throws MessagingException{ MessagingSettings settings = getMessagingSettings(); if (!settings.isEmailingEnabled()) { throw new MessagingException("E-mailing functionality is disabled globally"); } File[] attachments = ArrayUtil.convertListToArray(getAttachedFiles()); try { SendMail.send(getFromAddress(), getToAddress(), getCcAddress(), getBccAddress(), getReplyToAddress(), getMailServer(), getSubject(), getBody(), getMailType(), isAutoDeletedAttachments(), attachments); } catch (MessagingException e){ throw e; //fix } } public void setAttachments(Map<String, InputStream> attachments) { if (attachments == null || attachments.isEmpty()) { return; } for (String name: attachments.keySet()) { File attachment = null; InputStream stream = attachments.get(name); try { attachment = FileUtil.getFileAndCreateIfNotExists(name); FileUtil.streamToFile(stream, attachment); addAttachment(attachment); } catch(IOException e) { e.printStackTrace(); } finally { IOUtil.closeInputStream(stream); } } } @Override protected Object clone() throws CloneNotSupportedException { return new EmailMessage(this); } @Override public String toString() { return "Email's subject: " + getSubject() + "; to: " + getToAddress() + "; from: " + getFromAddress(); } public void setAttachedFiles(Collection<File> attachedFiles) { this.attachedFiles = attachedFiles; } public boolean isAutoDeletedAttachments() { return autoDeletedAttachments; } public void setAutoDeletedAttachments(boolean autoDeletedAttachments) { this.autoDeletedAttachments = autoDeletedAttachments; } public String getMailType() { return mailType; } public void setMailType(String mailType) { this.mailType = mailType; } public boolean isParsed() { return parsed; } public void setParsed(boolean parsed) { this.parsed = parsed; } }