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         * &lt;28405330.11271144052625.JavaMail.knoxg@filament&gt;
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}