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.4 2004/11/03 06:59:09 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 }