使用javamail接收邮件

本程序基于Sun公司提供的javamail1.1.4,实现了简单的邮件接收功能,对附件名的的乱码问题进行了处理。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;
import java.util.Date;
import java.util.Enumeration;
import java.util.Map;
import java.util.Properties;
import java.util.UUID;

import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;


public class Getmail {
private Properties props;
private String dir = "D:" + File.separator +"Mail" + File.separator;
boolean ssl;

public Getmail(){
props = new Properties();
this.setProps();

}


public static void main(String args[]) throws MessagingException,
IOException {


Getmail mail = new Getmail();
mail.parseMail();
}

public void parseMail(){
try {
Session session = Session.getInstance(props);
Store store = session.getStore("pop3");
store.connect("",""); //在此处设置用户名和密码
Folder folder = store.getFolder("INBOX");
System.out.println(folder.exists());
folder.open(Folder.READ_ONLY);

Message[] messages = folder.getMessages();

for(Message message:messages){
System.out.println("主题:" + this.getSubject(message));
System.out.println("发送时间:" + this.getSentTime(message));
this.parseContent((Multipart)message.getContent());
}

} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
/**
* 设置属性
*/
private void setProps(){

if(ssl){
this.handleSSL(props);
}

props.setProperty("mail.store.protocol", "pop3");
props.setProperty("mail.pop3.host", "pop.163.com");

// props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.pop3.socketFactory.fallback", "false");
props.setProperty("mail.pop3.port", "110");
props.setProperty("mail.pop3.socketFactory.port", "110");
}


private String getSubject(Message message) throws MessagingException{
return message.getSubject();
}

private Date getSentTime(Message message) throws MessagingException{
return message.getSentDate();
}

/**
* @param props
*/
private void handleSSL(Properties props){
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.pop3.socketFactory.fallback", "false");
props.setProperty("mail.pop3.port", "995");
props.setProperty("mail.pop3.socketFactory.port", "995");

props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.imap.socketFactory.fallback", "false");
props.setProperty("mail.imap.port", "993");
props.setProperty("mail.imap.socketFactory.port", "993");
}

/**
* 处理邮件内容
* @param multipart
*/
private void parseContent(Multipart multipart){

try {
for(int i = 0;i<multipart.getCount();i++){
BodyPart message = multipart.getBodyPart(i);
if((message.isMimeType("text/html"))||(message.isMimeType("text/plain"))){
System.out.println("邮件内容:" + message.getContent());
}
if(message.isMimeType("multipart/*")){
Multipart msg = (Multipart)message.getContent();
parseContent(msg);
}
if(message.isMimeType("application/octet-stream")){
String disposition = message.getDisposition();
if(disposition == null || disposition.equalsIgnoreCase(Part.ATTACHMENT)){
saveToFile(message);
}
}
}

} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**
* 存到文件中
* @param message
*/
private void saveToFile(BodyPart message){
InputStream is = null;
OutputStream os = null;
File file = new File(dir);
if(!file.exists()&&!file.isDirectory()){
file.mkdirs();
}
try {
String fileName = message.getFileName();

fileName = MimeUtility.decodeText(fileName); //处理附件名乱码问题

System.out.println(fileName);
File output = new File(dir + fileName);

is = message.getInputStream();
os = new FileOutputStream(output);
byte[] bytes = new byte[1024];
int len = 0;
while ((len=is.read(bytes)) != -1 ) {
os.write(bytes, 0, len);
}

} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {

os.flush();
is.close();
os.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值