首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

运用javamail接收邮件

2012-10-06 
使用javamail接收邮件本程序基于Sun公司提供的javamail1.1.4,实现了简单的邮件接收功能,对附件名的的乱码

使用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();}}        }} 

热点排行