View Javadoc

    1   package com.ozacc.mail.impl;
    2
    3   import java.util.Random;
    4
    5   import javax.mail.MessagingException;
    6   import javax.mail.Session;
    7   import javax.mail.internet.MimeMessage;
    8
    9   /***
    10   * Message-Idヘッダがカスタマイズ可能なMimeMessageのサブクラス。
    11   *
    12   * @since 1.1
    13   *
    14   * @author Tomohiro Otsuka
    15   * @version $Id: OMLMimeMessage.java,v 1.3.2.1 2004/11/25 08:01:07 otsuka Exp $
    16   */
    17  public class OMLMimeMessage extends MimeMessage {
    18
    19  	private String messageId;
    20
    21  	private static Random random = new Random();
    22
    23  	/***
    24  	 * コンストラクタ。
    25  	 *
    26  	 * @param session
    27  	 * @param messageId Message-Idヘッダのドメイン部分に使用する文字列
    28  	 */
    29  	public OMLMimeMessage(Session session, String messageId) {
    30  		super(session);
    31
    32  		String[] parts = messageId.split("@");
    33  		if (parts.length == 1) {
    34  			this.messageId = "@" + messageId;
    35  		} else if (parts.length == 2) {
    36  			if (parts[0].length() > 0 && !parts[0].startsWith(".")) {
    37  				this.messageId = "." + messageId;
    38  			} else {
    39  				this.messageId = messageId;
    40  			}
    41  		}
    42  	}
    43
    44  	/***
    45  	 * Message-Idヘッダをここでセットします。
    46  	 * <p>
    47  	 * 参考ページ<br>
    48  	 * <a href="http://java.sun.com/products/javamail/FAQ.html#msgid">http://java.sun.com/products/javamail/FAQ.html#msgid</a>
    49  	 *
    50  	 * @see javax.mail.internet.MimeMessage#updateHeaders()
    51  	 */
    52  	protected void updateHeaders() throws MessagingException {
    53  		super.updateHeaders();
    54  		setHeader("Message-ID", generateRandomMessageId());
    55  	}
    56
    57  	/***
    58  	 * タイムスタンプ + 16桁の乱数 + messageIdプロパティを連結した文字列を返します。
    59  	 *
    60  	 * @return タイムスタンプ + 16桁の乱数 + messageIdプロパティを連結した文字列
    61  	 */
    62  	protected String generateRandomMessageId() {
    63  		StringBuffer buf = new StringBuffer();
    64  		buf.append(System.currentTimeMillis()).append(".");
    65  		for (int i = 0; i < 16; i++) {
    66  			long num = Math.abs(random.nextInt(10));
    67  			buf.append(num);
    68  		}
    69  		buf.append(messageId);
    70  		return buf.toString();
    71  	}
    72
    73  }