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 }