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  }