001package com.randomnoun.common.email; 002 003import jakarta.mail.MessagingException; 004import jakarta.mail.Session; 005import jakarta.mail.internet.MimeMessage; 006 007/* (c) 2013 randomnoun. All Rights Reserved. This work is licensed under a 008 * BSD Simplified License. (http://www.randomnoun.com/bsd-simplified.html) 009 */ 010 011public class CustomMimeMessage extends MimeMessage { 012 013 private String client; 014 private String suffix; 015 private static int id = 0; 016 017 /** Create a MimeMessage. Equivalent to mavax.mail.MimeMessage(Session), 018 * but allows a different Message-ID to be set. 019 * 020 * Normal Message-IDs look like this: 021 * <pre> 022 * <28405330.11271144052625.JavaMail.knoxg@filament> 023 * -client-.----suffix---- 024 * </pre> 025 * but this class allows different values for client and suffix above. 026 * 027 * @param session 028 * @param client 029 * @param suffix 030 */ 031 public CustomMimeMessage(Session session, String client, String suffix) { 032 super(session); 033 this.client = client; 034 this.suffix = suffix; 035 } 036 037 /** 038 * Update the Message-ID header. This method is called 039 * by the <code>updateHeaders</code> and allows a subclass 040 * to override only the algorithm for choosing a Message-ID. 041 * 042 * @since JavaMail 1.4 043 */ 044 protected void updateMessageID() throws MessagingException { 045 // setHeader("Message-ID", "<" + UniqueValue.getUniqueMessageIDValue(session) + ">"); 046 setHeader("Message-ID", "<" + getUniqueMessageIDValue(session) + ">"); 047 } 048 049 public String getUniqueMessageIDValue(Session session) { 050 // String suffix = null; 051 052 /*InternetAddress addr = InternetAddress.getLocalAddress(ssn); 053 if (addr != null) 054 suffix = addr.getAddress(); 055 else { 056 suffix = "javamailuser@localhost"; // worst-case default 057 } 058 */ 059 060 StringBuffer s = new StringBuffer(); 061 062 // Unique string is <hashcode>.<id>.<currentTime>.JavaMail.<suffix> 063 s.append(s.hashCode()).append('.').append(getUniqueId()).append('.'). 064 append(System.currentTimeMillis()).append('.'). 065 // append("JavaMail."). 066 append(client). 067 append(suffix); 068 return s.toString(); 069 070 } 071 072 private static synchronized int getUniqueId() { 073 return id++; 074 } 075 076 077}