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 }