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 }