Receiving Mail

Receiving mail is considerably more complex than sending it. For instance, where a simple HELLO command is sufficient to access most SMTP servers (a fact that is the source of much forged email and spam), retrieving email generally requires providing both a username and a password. SMTP uses only 14 different commands, and a simple email client can be implemented with just five of them. POP3, however, has 12 commands, almost all of which a client must be able to handle, and IMAP4 has 24 different commands.

The JavaMail API is designed around the idea that you’re retrieving messages from an IMAP or perhaps an NNTP server. That is, it assumes that the server can return headers separate from the messages they belong to, that it can search through mailboxes, that it provides the storage for the messages rather than the client, and so forth. The JavaMail API provides less of what you need for client-oriented mail access protocols, such as POP3, that assume the client stores and manage the mail archive, but it still gives you the tools to download the mail from the server. You just have to implement your own storage system on the client.

More clients today use POP rather than IMAP to access their mail (especially at ISPs that don’t want to spend disk space on storing users’ mailboxes), so we’ll begin with the simpler POP protocol, then move on to IMAP. From the perspective of JavaMail, IMAP can be viewed largely as POP plus some commands for manipulating folders. For simple ...

Get Java Network Programming, Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.