java实现QQ邮箱读取

下载mail-1.4.7架包,把架包导入项目

public static void main(String[] args) throws MessagingException, IOException {
        
        //创建属性对象
        Properties p = new Properties();
        p.put("mail.imap.auth.login.disable", "true");//身份验证
        p.put("mail.imap.host", "imap.qq.com");//主机
        p.put("mail.store.protocol", "imap");//协议
        p.put("mail.imap.port", "993");//端口
        
        //qq邮箱需要SSL加密
        p.put("mail.smtp.socketFactory.port", "993");
        p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        
        //创建会话
        Session session = Session.getInstance(p);
        //存储对象
        Store store = session.getStore("imap");
        //连接
        store.connect("imap.qq.com","1156380111@qq.com","vesqbmmaicgdibfb");
        
        
        //创建目录对象
        Folder folder = store.getFolder("Inbox");
        //打开模式:只读
        folder.open(Folder.READ_ONLY);
        
        //获取消息,数组
        Message[] ms = folder.getMessages();
        
        //预提取对象
        FetchProfile fp = new FetchProfile();
        //属性
        fp.add(FetchProfile.Item.ENVELOPE);
        //内容
        fp.add(FetchProfile.Item.CONTENT_INFO);
        //标志属性
        fp.add(FetchProfile.Item.FLAGS);
        //x-mailer属性
        fp.add("x-mailer");
        
        //提取
        folder.fetch(ms, fp);
        
        //遍历
        for(Message m : ms) {
            String title = m.getSubject();//邮件的标题
            int size = m.getSize();//邮件的大小
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format( m.getSentDate());//邮件的接受时间
            
            System.out.println("标题:"+title);
            System.out.println("大小:"+size);
            System.out.println("接受时间:"+date);
            
            Object obj = m.getContent();//获取邮件内容
            //内容类型判断
            //纯文本
            if(m.isMimeType("text/plain") || m.isMimeType("text/html")) {
                System.out.println("邮件内容:"+obj);
            }
            //多个组件内容
            if(m.isMimeType("multipart/*")) {
                //强制转换为多个组件类型
                Multipart part = (Multipart) obj;
                //遍历每个组件
                for(int i=0;i<part.getCount();i++) {
                    //每个组件的内容
                    BodyPart body = part.getBodyPart(i);
                    //判断组件内容的类型
                    //纯文字
                    if(body.isMimeType("text/plain") || body.isMimeType("text/html") ) {
                        System.out.println("邮件内容:"+body.getContent());
                    }
                    //附件
                    if(body.isMimeType("application/octet-stream")) {
                        String fileName = body.getFileName();//获取附件的文件名
                        fileName  = MimeUtility.decodeText(fileName);
                        
                        //存取当前附件
                        //使用输入输出流
                        InputStream is = body.getInputStream();
                        OutputStream os = new FileOutputStream("F:\\lishi"+fileName);
                        byte[] b = new byte[1024];
                        int len = 0;
                        while((len=is.read(b)) != -1) {
                            os.write(b, 0, len);
                        }
                        is.close();
                        os.close();
                    }
                }
            }
        }
    }

 

posted @ 2018-09-20 19:51  跳梁小豆  阅读(805)  评论(2编辑  收藏  举报