View Javadoc

1   package com.ozacc.mail.fetch;
2   
3   import java.io.File;
4   import java.util.Date;
5   import java.util.Iterator;
6   
7   import javax.mail.Flags;
8   import javax.mail.MessagingException;
9   import javax.mail.internet.MimeMessage;
10  
11  import com.ozacc.mail.Mail;
12  
13  /***
14   * 受信メール。
15   * <p>
16   * <code>FetchMail</code>、<code>FetchMailPro</code>の実装クラスで受信したメールが、
17   * インターネットメールとしての仕様を満たしていないヘッダ(FromやToなど)の値がセットされていた場合、
18   * そのヘッダに該当する<code>ReceivedMail</code>インスタンスのプロパティには何もセットされません。
19   * 
20   * @since 1.2
21   * @author Tomohiro Otsuka
22   * @version $Id: ReceivedMail.java,v 1.1.2.6 2005/01/19 14:23:25 otsuka Exp $
23   */
24  public class ReceivedMail extends Mail {
25  
26  	private Date date;
27  
28  	private String messageId;
29  
30  	private int size;
31  
32  	private MimeMessage message;
33  
34  	/***
35  	 * コンストラクタ。
36  	 */
37  	public ReceivedMail() {
38  		super();
39  	}
40  
41  	/***
42  	 * コンストラクタ。
43  	 * 
44  	 * @param charset 
45  	 */
46  	public ReceivedMail(String charset) {
47  		super(charset);
48  	}
49  
50  	/***
51  	 * コピーコンストラクタ。
52  	 * 
53  	 * @param original 
54  	 */
55  	public ReceivedMail(Mail original) {
56  		super(original);
57  	}
58  
59  	/***
60  	 * 送信日時を返します。
61  	 * <p>
62  	 * 注: メールの受信日時ではありません。
63  	 * 
64  	 * @return 送信日時
65  	 */
66  	public Date getDate() {
67  		return date;
68  	}
69  
70  	/***
71  	 * 送信日時をセットします。
72  	 * 
73  	 * @param date 送信日時
74  	 */
75  	public void setDate(Date date) {
76  		this.date = date;
77  	}
78  
79  	/***
80  	 * 前後に&lt;&gt;が付いたメッセージIDを返します。
81  	 * 
82  	 * @return 前後に&lt;&gt;が付いたメッセージID
83  	 */
84  	public String getMessageId() {
85  		return messageId;
86  	}
87  
88  	/***
89  	 * メッセージIDを返します。前後に&lt;&gt;は付きません。
90  	 * 
91  	 * @return メッセージID
92  	 */
93  	public String getMessageIdOnly() {
94  		return messageId.substring(1, messageId.length() - 1);
95  	}
96  
97  	/***
98  	 * メッセージIDをセットします。
99  	 * 
100 	 * @param messageId メッセージID
101 	 */
102 	public void setMessageId(String messageId) {
103 		this.messageId = messageId;
104 	}
105 
106 	/***
107 	 * メール内容を出力します。<br>
108 	 * メールのソースに似たフォーマットで出力されます。
109 	 * 
110 	 * @see java.lang.Object#toString()
111 	 */
112 	public String toString() {
113 		StringBuffer buf = new StringBuffer(1000);
114 		buf.append("Mail\n");
115 		buf.append("Return-Path: ").append(returnPath).append("\n");
116 		buf.append("Message-ID: ").append(messageId).append("\n");
117 		buf.append("Date: ").append(date).append("\n");
118 		buf.append("From: ").append(from != null ? from.toUnicodeString() : null).append("\n");
119 		buf.append("To: ").append(arrayToCommaDelimitedString(to)).append("\n");
120 		buf.append("Cc: ").append(arrayToCommaDelimitedString(cc)).append("\n");
121 		buf.append("Bcc: ").append(arrayToCommaDelimitedString(bcc)).append("\n");
122 		buf.append("Reply-To: ").append(replyTo != null ? replyTo.toUnicodeString() : null).append(
123 				"\n");
124 		buf.append("Subject: ").append(subject).append("\n");
125 
126 		if (xHeaders != null) {
127 			for (Iterator itr = xHeaders.keySet().iterator(); itr.hasNext();) {
128 				String header = (String)itr.next();
129 				String value = (String)xHeaders.get(header);
130 				buf.append(header).append(": ").append(value).append("\n");
131 			}
132 		}
133 
134 		buf.append("\n");
135 		buf.append(text);
136 
137 		if (htmlText != null) {
138 			buf.append("\n\n-----\n\n");
139 			buf.append(htmlText);
140 		}
141 
142 		if (isFileAttached()) {
143 			buf.append("\n\nAttachments\n");
144 			for (int i = 0, num = attachmentFiles.size(); i < num; i++) {
145 				AttachmentFile f = (AttachmentFile)attachmentFiles.get(i);
146 				buf.append("[").append(i + 1).append("] ").append(f.getName()).append("\n");
147 			}
148 		}
149 
150 		return buf.toString();
151 	}
152 
153 	/***
154 	 * @return Returns the message.
155 	 */
156 	public MimeMessage getMessage() {
157 		return message;
158 	}
159 
160 	/***
161 	 * @param message The message to set.
162 	 */
163 	public void setMessage(MimeMessage message) {
164 		this.message = message;
165 	}
166 
167 	/***
168 	 * メールサーバとの接続切断時に、このメールをメールサーバから削除します。
169 	 * 削除できるように設定ができた場合に true を返します。
170 	 * <p>
171 	 * このメソッドは、<code>FetchMailPro</code>のメソッドによって取得された
172 	 * <code>ReceivedMail</code>インスタンスでのみ有効です。
173 	 * また、<code>FetchMailPro</code>インスタンスがメールサーバに
174 	 * 接続されている状態での呼び出しのみ有効です。<br>
175 	 * これらの条件が満たされない時にこのメソッドが呼び出された場合
176 	 * false を返します。
177 	 * 
178 	 * TODO: うまく動いてない。
179 	 * 
180 	 * @see FetchMailPro
181 	 * @param delete 削除するように設定する場合 true
182 	 * @return 削除設定が正常に行われた場合 true
183 	 */
184 	public boolean setDelete(boolean delete) {
185 		if (message != null) {
186 			try {
187 				message.setFlag(Flags.Flag.DELETED, delete);
188 			} catch (MessagingException e) {
189 				return false;
190 			}
191 			return true;
192 		}
193 		return false;
194 	}
195 
196 	/***
197 	 * メールのサイズ(容量)を返します。単位はbyte。
198 	 * この値は厳密なものではないので注意してください。
199 	 * 
200 	 * @see MimeMessage#getSize()
201 	 * @return メールのサイズ(単位はbyte)
202 	 */
203 	public int getSize() {
204 		return size;
205 	}
206 
207 	/***
208 	 * メールのサイズ(容量)をセットします。単位はbyte。
209 	 * 
210 	 * @param size メールのサイズ(単位はbyte)
211 	 */
212 	public void setSize(int size) {
213 		this.size = size;
214 	}
215 
216 	/***
217 	 * 添付ファイルのFileインスタンス配列を返します。
218 	 * 添付ファイルがない場合は空の配列を返します。
219 	 * 
220 	 * @return 添付ファイルのFileインスタンス配列
221 	 */
222 	public File[] getFiles() {
223 		AttachmentFile[] aFiles = getAttachmentFiles();
224 		File[] files = new File[aFiles.length];
225 		for (int i = 0; i < aFiles.length; i++) {
226 			AttachmentFile aFile = aFiles[i];
227 			files[i] = aFile.getFile();
228 		}
229 		return files;
230 	}
231 }