Have a look at what the Message.getFlags method returns. The Flags.Flag class defines a flag called "SEEN", which indicates whether a message has been retrieved by a client. That is probably as close as you'll get. There is no way to determine if someone actually read it.