Hello Pierre, sorry, no, not generated by james. So this is not a james bug.
It seems that a lot of spam senders just do not set the id, and some older clients like outlook 2003. This is conform to RFC, because the id SHOULD exist. But do not need to. In our code we use the id, e.g. for logging. ciao Bernd -----Ursprüngliche Nachricht----- Von: Pierre Smits [mailto:pierre.sm...@gmail.com] Gesendet: Dienstag, 21. Oktober 2014 10:02 An: James Users List Betreff: Re: Does james re-use messageID? [unsigned] Hi Bernd, You stated that you see a lot of mails without a message id. Are that mails/messages generated by James? Or is the statement to be considered as 'in general'? If it is pertaining to James, then we should consider this a bug and a JIRA could be registered. Regards Pierre Smits *ORRTIZ.COM <http://www.orrtiz.com>* Services & Solutions for Cloud- Based Manufacturing, Professional Services and Retail & Trade http://www.orrtiz.com On Tue, Oct 21, 2014 at 8:57 AM, Bernd Waibel <bwai...@intarsys.de> wrote: > 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 >