001 /*
002 * Copyright 2010 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package com.hs.mail.imap.message;
017
018 import java.io.File;
019 import java.io.FileInputStream;
020 import java.io.FileOutputStream;
021 import java.io.IOException;
022 import java.io.InputStream;
023 import java.io.OutputStream;
024 import java.util.Date;
025
026 import javax.mail.Flags;
027
028 import org.apache.commons.io.FileUtils;
029 import org.apache.commons.io.IOUtils;
030 import org.apache.james.mime4j.field.address.Mailbox;
031
032 import com.hs.mail.container.config.Config;
033
034 /**
035 *
036 * @author Won Chul Doh
037 * @since May 5, 2010
038 *
039 */
040 public class MailMessage extends FetchData {
041
042 private MessageHeader header;
043 private File file;
044
045 private MailMessage(File file) {
046 super();
047 this.file = file;
048 }
049
050 public MessageHeader getHeader() {
051 return header;
052 }
053
054 public void setHeader(MessageHeader header) {
055 this.header = header;
056 }
057
058 public String getSubject() {
059 return header.getSubject();
060 }
061
062 public String getFrom() {
063 return header.getFrom().getAddress();
064 }
065
066 public String getReplyTo() {
067 Mailbox m = header.getReplyTo();
068 if (m == null)
069 return getFrom();
070 else
071 return header.getReplyTo().getAddress();
072 }
073
074 public InputStream getInputStream() throws IOException {
075 return new FileInputStream(file);
076 }
077
078 public void save(boolean deleteSrc) throws IOException {
079 File dest = Config.getDataFile(getInternalDate(), getPhysMessageID());
080 if (deleteSrc) {
081 FileUtils.moveFile(file, dest);
082 } else {
083 FileUtils.copyFile(file, dest);
084 }
085 }
086
087 public void save(InputStream is) throws IOException {
088 File dest = Config.getDataFile(getInternalDate(), getPhysMessageID());
089 OutputStream os = null;
090 try {
091 os = new FileOutputStream(dest);
092 IOUtils.copyLarge(is, os);
093 } finally {
094 IOUtils.closeQuietly(os);
095 IOUtils.closeQuietly(is);
096 }
097 }
098
099 public static MailMessage createMailMessage(File file) throws IOException {
100 return createMailMessage(file, new Date(), null);
101 }
102
103 public static MailMessage createMailMessage(File file, Date internalDate,
104 Flags flags) throws IOException {
105 MailMessage message = new MailMessage(file);
106 FileInputStream fis = null;
107 try {
108 fis = new FileInputStream(file);
109 MessageHeader header = new MessageHeader(fis);
110 message.setPhysMessageID(0);
111 message.setHeader(header);
112 message.setSize(file.length());
113 message.setInternalDate(internalDate);
114 message.setFlags(flags);
115 return message;
116 } finally {
117 IOUtils.closeQuietly(fis);
118 }
119 }
120
121 }