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 * 前後に<>が付いたメッセージIDを返します。
80 *
81 * @return 前後に<>が付いたメッセージID
82 */
83 public String getMessageId() {
84 return messageId;
85 }
86
87 /***
88 * メッセージIDを返します。前後に<>は付きません。
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 }