View Javadoc

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