代码如下:
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;
}
}
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;
}
}
本文介绍了一个使用Java实现的从POP3服务器接收邮件及其附件的方法。通过解析邮件内容并下载附件到指定目录,此代码示例展示了如何配置邮件会话、连接邮箱服务器、获取邮件列表及读取邮件内容。
3057

被折叠的 条评论
为什么被折叠?



