Use Fetch Profiles
When performing any network operation,
particularly high-volume applications such as downloading email from
a message store, it always makes sense to take only what you need.
JavaMail supports this by implementing most messages as
“lazy” objects. When you call the
getMessages( )
method of a folder, JavaMail does not automatically fetch all the
messages in the folder, with all their content. Instead, it creates a
set of “lazy-load” objects that
access the server as necessary to retrieve particular message
components. The efficacy of all this will vary depending on the
message store type and implementation.
Sometimes it’s desirable to skip the lazy-load and
retrieve larger quantities of message information at once. In
JavaMail, you can accomplish this via a fetch
profile. Fetch profiles allow you to specify the
components of a message that will be downloaded when the message is
initially retrieved from the remote message store. The
FetchProfile.Item
object defines three constants: ENVELOPE (for message headers), FLAGS (for mailsystem status flags), and CONTENT_INFO (for headers defining the content of message parts). You can add any or all of these items to a fetch profile, which will instruct the server, where possible, to retrieve all the information in the profile for every message retrieved. This information can then be reviewed without further network access. When you try to access data not included in the fetch profile, the implementation will retrieve ...