I needed to resend all messages delivered by FetchMail to users, who are not defined to James, into postmaster's mailbox. To do so I've added a new mailet with HasMailAttribute matcher to process messages with "org.apache.james.fetchmail.isUserUndefined" attribute. But this mailet has never been actually invoked in spite of the aforementioned attribute presence.
In the FetchMail's source code I've found that all attributes which do not assume some particular value, are initialized by nulls:
aMail.setAttribute(getAttributePrefix() + "isUserUndefined", null);
But HasMailAttribute matcher ignores attributes with null values:
if (mail.getAttribute (attributeName) != null)
If I assign arbitrary not null value to the attribute like this
aMail.setAttribute(getAttributePrefix() + "isUserUndefined", "true");
the matcher works fine and my mailet is then invoked.
Thereby we have some incorrectly initialized attributes which are definitely ignored by matchers (and possibly cause some other troubles).