Hi Giri,

your question is somehow unclear to me. So I try to clear some things up.
There is a "message ID" and a "message number".

According to RFC every mail SHOULD have a Header-Field "message-id".
(See https://tools.ietf.org/html/rfc2822 Chapter 3.6.4).
But "in the wild" we observe a lot of mails without a message id.
The "message number" is just the number of a mail in a folder.
So if you delete messages in a folder, you may get new message numbers. Or 
maybe if the get sorted.

If you would like to identify a message, you could use message-id, but you 
could not trust this header field to be set.
So we do fix that in our own implementation: (our code, feel free to use):
        /**
         * An id suitable for logging etc.
         * 
         * @param mail
         * @return
         */
        static public String getId(Mail mail) {
                try {
                        // rfc2822: every message SHOULD have a "Message-ID:" 
field.
                        // But not need to. Outlook 2003 may miss the id.
                        String id = mail.getMessage().getMessageID();
                        if (id == null || id.trim().isEmpty())) {
                                id = mail.getName();
                        }
                        return id;
                } catch (MessagingException e) {
                        return mail.getName();
                }
        }
We use the "getName" as fallback, which ist part of the org.apache.mailet.Mail 
API.
This seems to work good, we did not have mails without a name till now.

But the name need NOT to be unique. E.g. if you "copy" a mail in your programm, 
it may have the same name.
To me it seems there is not a "always unique" number.
The message-id is very near to "always unique", if it exists.
The "name" may be next to that, it seems always to be be there.
The "messagenumber" is only temporary unique.

Btw: This is not part of "james", is it part of the Java Mail API, developed by 
Sun, years ago.

For the java classes you mentioned, you may have a look at the source code of 
this classes:
javax.mail.Message:
    /**
     * Get the Message number for this Message.
     * A Message object's message number is the relative
     * position of this Message in its Folder. Note that the message
     * number for a particular Message can change during a session
     * if other messages in the Folder are deleted and expunged. <p>
     *
     * Valid message numbers start at 1. Messages that do not belong
     * to any folder (like newly composed or derived messages) have 0
     * as their message number.
     *
     * @return  the message number
     */
    public int getMessageNumber() {
        return msgnum;
    }

 javax.mail.internet.MimeMessage (extends javax.mail.Message)
    /**
     * Returns the value of the "Message-ID" header field. Returns
     * null if this field is unavailable or its value is absent. <p>
     *
     * The default implementation provided here uses the
     * <code>getHeader</code> method to return the value of the
     * "Message-ID" field.
     *
     * @return     Message-ID
     * @exception  MessagingException if the retrieval of this field
     *                  causes any exception.
     * @see        javax.mail.search.MessageIDTerm
     * @since      JavaMail 1.1
     */
    public String getMessageID() throws MessagingException {
        return getHeader("Message-ID", null);
    }

Good luck,
Bernd

-----Ursprüngliche Nachricht-----
Von: Girivaraprasad Nambari [mailto:girinamb...@gmail.com] 
Gesendet: Dienstag, 21. Oktober 2014 07:35
An: James Users List
Betreff: Does james re-use messageID?

Hi Everyone,

I have observed an interesting scenario today with James messageID, I received 
few hundred emails and all emails got incremented messageID.

Today I deleted few old emails. The emails I received after cleaning up old 
emails got old message Id's.

1) Does james re-use messageID?
If yes, is there anyway we can disable this feature?

In my code I am using following statement to retrieve message ID:
 MimeMessage msg = (MimeMessage) cMsg;
 int messageNumber = msg.getMessageNumber();

As per mail specification, shouldn't messagenumber be unique?

Any help appreciated.

Thank you,
Giri

Reply via email to