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.3 2006/01/20 10:57:50 otsuka Exp $
    16   */
    17  public class OMLMimeMessage extends MimeMessage {
    18
    19  	private static Random random = new Random();
    20
    21  	private String domainPartOfMessageId;
    22
    23  	private String messageId;
    24
    25  	/***
    26  	 * コンストラクタ。
    27  	 *
    28  	 * @param session
    29  	 * @param domainPartOfMessageId Message-Idヘッダのドメイン部分に使用する文字列
    30  	 */
    31  	public OMLMimeMessage(Session session, String domainPartOfMessageId) {
    32  		super(session);
    33
    34  		String[] parts = domainPartOfMessageId.split("@");
    35  		if (parts.length == 1) {
    36  			this.domainPartOfMessageId = "@" + domainPartOfMessageId;
    37  		} else if (parts.length == 2) {
    38  			if (parts[0].length() > 0 && !parts[0].startsWith(".")) {
    39  				this.domainPartOfMessageId = "." + domainPartOfMessageId;
    40  			} else {
    41  				this.domainPartOfMessageId = domainPartOfMessageId;
    42  			}
    43  		}
    44  		messageId = generateRandomMessageId();
    45  	}
    46
    47  	/***
    48  	 * Message-Idヘッダをここでセットします。
    49  	 * <p>
    50  	 * 参考ページ<br>
    51  	 * <a href="http://java.sun.com/products/javamail/FAQ.html#msgid">http://java.sun.com/products/javamail/FAQ.html#msgid</a>
    52  	 *
    53  	 * @see javax.mail.internet.MimeMessage#updateHeaders()
    54  	 */
    55  	protected void updateHeaders() throws MessagingException {
    56  		super.updateHeaders();
    57  		setHeader("Message-ID", messageId);
    58  	}
    59
    60  	/***
    61  	 * タイムスタンプ + 16桁の乱数 + messageIdプロパティを連結した文字列を返します。
    62  	 *
    63  	 * @return タイムスタンプ + 16桁の乱数 + messageIdプロパティを連結した文字列
    64  	 */
    65  	protected String generateRandomMessageId() {
    66  		StringBuffer buf = new StringBuffer();
    67  		buf.append("<");
    68  		buf.append(System.currentTimeMillis()).append(".");
    69  		for (int i = 0; i < 16; i++) {
    70  			long num = Math.abs(random.nextInt(10));
    71  			buf.append(num);
    72  		}
    73  		buf.append(domainPartOfMessageId);
    74  		buf.append(">");
    75  		return buf.toString();
    76  	}
    77
    78  	/***
    79  	 * 生成されたMessage-Idを返します。
    80  	 *
    81  	 * @return 生成されたMessage-Id
    82  	 */
    83  	public String getMessageId() {
    84  		return messageId;
    85  	}
    86  }