代码如下:
package demo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;

import sun.misc.BASE64Decoder;


public class MailReceiver ...{


public static void main(String[] args) ...{

MailReceiver receiver = new MailReceiver();
receiver.setHost("pop3.163.com");
receiver.setUsername("xxxxxxxxx");
receiver.setPassword("yyyyyyyyy");
receiver.setAttachPath("C:/email");

try ...{
receiver.reveiveMail();

} catch (Exception e) ...{
e.printStackTrace();
}
}


public void reveiveMail() throws Exception ...{

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("pop3");
store.connect(getHost(), getUsername(), getPassword());

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
System.out.println("Messages's length: " + message.length);

//FetchProfile profile = new FetchProfile();
//profile.add(FetchProfile.Item.ENVELOPE);
//folder.fetch(message, profile);

for (int i = 0; i < message.length; i++) ...{
//message[i].setFlag(Flags.Flag.DELETED, true);//必须先设置:folder.open(Folder.READ_WRITE);
handleMultipart(message[i]);
}

if (folder != null) ...{
folder.close(true);
}

if (store != null) ...{
store.close();
}
}


private void handleMultipart(Message msg) throws Exception ...{
String disposition;
Multipart mp = (Multipart) msg.getContent();
int mpCount = mp.getCount();

for (int m = 0; m < mpCount; m++) ...{
handle(msg);
BodyPart part = mp.getBodyPart(m);
disposition = part.getDisposition();

if (disposition != null && disposition.equals(Part.ATTACHMENT)) ...{
saveAttach(part, getAttachPath());

} else ...{
System.out.println(part.getContent());
}
}
}


private static void handle(Message msg) throws Exception ...{
System.out.println("邮件主题:" + msg.getSubject());
System.out.println("邮件作者:" + msg.getFrom()[0].toString());
System.out.println("发送日期:" + msg.getSentDate());
}


private static void saveAttach(BodyPart part, String filePath) throws Exception ...{

String temp = part.getFileName();
String s = temp.substring(8, temp.indexOf("?="));
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);

InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(filePath + "/" + fileName));
byte[] content = new byte[255];

while ((in.read(content)) != -1) ...{
writer.write(content);
}
writer.close();
in.close();
}


private static String base64Decoder(String s) throws Exception ...{
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}

private String host = null;
private String username = null;
private String password = null;
private String attachPath = null;

public String getAttachPath() ...{
return attachPath;
}


public void setAttachPath(String attachPath) ...{
this.attachPath = attachPath;
}


public String getHost() ...{
return host;
}


public void setHost(String host) ...{
this.host = host;
}


public String getUsername() ...{
return username;
}


public void setUsername(String username) ...{
this.username = username;
}


public String getPassword() ...{
return password;
}


public void setPassword(String password) ...{
this.password = password;
}
}












































































































































































