Use Commons Net POP3Client
to check a POP3 mailbox
for incoming mail. The following example connects to the
POP3
server www.discursive.com
, logs in as
[email protected]
, and prints each message in
the mailbox:
import org.apache.commons.io.CopyUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.net.pop3.POP3Client; import org.apache.commons.net.pop3.POP3MessageInfo; POP3Client client = new POP3Client( ); client.connect("www.discursive.com"); client.login("[email protected]", "secretpassword"); POP3MessageInfo[] messages = client.listMessages( ); for (int i = 0; i < messages.length; i++) { int messageNum = messages[i].number; System.out.println( "************* Message number: " + messageNum ); Reader reader = client.retrieveMessage( messageNum ); System.out.println( "Message: " + IOUtils.toString( reader ) ); IOUtils.closeQuietly( reader ); } client.logout( ); client.disconnect( );
This example calls client.listMessage()
to get an array of
POP3MessageInfo
objects. Each message is retrieved
using the message number contained in each
POP3MessageInfo
. To retrieve the contents of an
individual message, the message number is passed to
retrieveMessage()
, which returns a Reader
from which the message body is read. The previous example prints the
contents of a POP3 mailbox, as shown below:
************* Message number: 1 Message: Return-Path: <[email protected]> X-Original-To: [email protected] Delivered-To: [email protected] Received: from jerk-net.co.jp (unknown [219.71.255.123]) by pericles.symbiont.net (Postfix) with SMTP id 6FA54543FE for <[email protected]>; Tue, 22 Jun 2004 02:19:13 -0400 (EDT) Received: from 228.4.65.206 by smtp.cito.nl; Tue, 22 Jun 2004 06:09:26 +0000 Message-ID: <[email protected]> From: "Spammer" <[email protected]> To: [email protected] Subject: Hey, I heard you need a mortgage Date: Tue, 22 Jun 2004 02:09:21 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Hello, I heard that you must be a sucker, so I thought I would send you some unsolicited email about a mortgage. Only 3%, and you can even wire the money directly to my friend from Nigeria. Did I mention that if you decide to take this mortgage I'll send you the secret for making millions by sending useless spam. --- Mr. Jerk Spammer "I ruin email for everyone!"
This example did not venture into the topic of parsing an email
message body. As shown above, the message read with
retrieveMessage( )
is a raw message with SMTP
headers containing the Subject
,
Message-ID
, and other important pieces of data
associated with a message. The body of a message is separated from a
list of headers by a single blank, and if you are creating a mail
client for a user, you will need to write a parser that can extract a
relevant header—such as Subject
and
From
—from the raw email message.
This recipe used IOUtils.toString( )
and
IOUtils.closeQuietly( )
to copy and close a
Reader
for each email message. These methods are
described in detail in Recipe 10.2 and Recipe 10.3.
For a good overview of SMTP and POP3 from the perspective of a FreeBSD administrator, take a look at Dru Lavigne’s article “Understanding E-Mail” from OnLamp.com (http://www.onlamp.com/pub/a/bsd/2000/08/30/FreeBSD_Basics.html).
3.133.124.145