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.2 2005/01/29 23:09:00 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(System.currentTimeMillis()).append(".");
68  		for (int i = 0; i < 16; i++) {
69  			long num = Math.abs(random.nextInt(10));
70  			buf.append(num);
71  		}
72  		buf.append(domainPartOfMessageId);
73  		return buf.toString();
74  	}
75  
76  	/***
77  	 * 生成されたMessage-Idを返します。
78  	 * 
79  	 * @return 生成されたMessage-Id
80  	 */
81  	public String getMessageId() {
82  		return messageId;
83  	}
84  }