使用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 blocke.printStackTrace();} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {os.flush();is.close();os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }}