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 }