Failed to load IMAP envelope

Exception in thread "main" javax.mail.MessagingException: Failed to load IMAP envelope
at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1069)
at com.sun.mail.imap.IMAPMessage.getSubject(IMAPMessage.java:256)
at WSLTest.main(WSLTest.java:47)

主要原因是使用了smtp接受方式。应该为imap

    private static FlagTerm recentTerm = new FlagTerm(new Flags(Flags.Flag.RECENT),
            true);
    public static String myEmailSMTPHost = "imap.qiye.163.com";
    public static String myEmailAccount = "邮箱";
    public static String myEmailPassword = "密码";

    public static  void reserveemail() throws Exception {

         Properties props = new Properties(); 
            props.setProperty("mail.store.protocol", "imap"); 
            props.setProperty("mail.imap.host", "imap.qiye.163.com"); 
            props.setProperty("mail.imap.port", "143"); 
        Store store = null;
       
        // 用来存放邮件中文件夹的,可以简单的使用javax.mail.Folder类型,
        // 如果只是取未读邮件数的话Folder类型就够了

        try {
             Session session = Session.getInstance(props); 
            //如果使用pop3协议这里imap改成pop3,如果使用ssl连接这里应使用imaps
            store = session.getStore("imap");
            store.connect(myEmailAccount,myEmailPassword);
            //System.out.println(store);
             Folder folder = getInboxFolder(store, false);   //取得收件箱对象
           
            //如果需要在取得邮件数后将邮件置为已读则这里需要使用READ_WRITE,否则READ_ONLY就可以
               
                // 获得收件箱的邮件列表 
                Message[] messages = folder.search(recentTerm); 
                for (Message message : messages) {
                    try{
                        IMAPMessage msg = (IMAPMessage) message;
                        System.out.println(msg.getSubject());
                        //InventecEmailProcessor iema=new InventecEmailProcessor();
                        //iema.resolvemsg(msg);
                        msg.setFlag(Flags.Flag.SEEN, true);
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                   
                }
            // Message messages[] = inbox.getMessages(); //获取所有邮件

            //建立搜索条件FlagTerm,这里FlagTerm继承自SearchTerm,也就是说除了获取未读邮
            //件的条件还有很多其他条件同样继承了SearchTerm的条件类,像根据发件人,主题搜索等,
            // 还有复杂的逻辑搜索类似:
            //    
            //    SearchTerm orTerm = new OrTerm(  
            //            new FromStringTerm(from),  
            //            new SubjectTerm(subject)  
            //            );
            // 
            // 可以上网搜索SearchTerm获取更多

            /*FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false); //false代表未读,true代表已读

            *//**
             * Flag 类型列举如下
             * Flags.Flag.ANSWERED 邮件回复标记,标识邮件是否已回复。
             * Flags.Flag.DELETED 邮件删除标记,标识邮件是否需要删除。
             * Flags.Flag.DRAFT 草稿邮件标记,标识邮件是否为草稿。
             * Flags.Flag.FLAGGED 表示邮件是否为回收站中的邮件。
             * Flags.Flag.RECENT 新邮件标记,表示邮件是否为新邮件。
             * Flags.Flag.SEEN 邮件阅读标记,标识邮件是否已被阅读。
             * Flags.Flag.USER 底层系统是否支持用户自定义标记,只读。
             *//*

            Message messages[] = inbox.search(ft); //根据设置好的条件获取message
              System.out.println("邮件总共:"+messages.length+"封");
             // System.out.println("11111111111111");
            //遍历获取的Message数组获取信息
            for (Message message : messages) {
                try{
                    System.out.println(message.getSubject().toString());
                    message.setFlag(Flags.Flag.SEEN, true);
                }catch(Exception e){
                    //e.printStackTrace();
                    System.out.println("读取出错!======================");
                    //message.setFlag(Flags.Flag.SEEN, true);
                }
                 
            }
            //inbox.setFlags(messages, new Flags(Flags.Flag.SEEN),true);
       */
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
               
                if (store != null) {
                    store.close();
                    store = null;
                }
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
       /**
         * 获取文件夹 这里是收件箱
         *
         * @param store
         * @param readOnly
         * @return
         * @throws MessagingException
         */
        private static IMAPFolder getInboxFolder(Store store, boolean readOnly)
                throws MessagingException {
            IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX");
            if (!folder.isOpen()) {
                if (readOnly) {
                    folder.open(Folder.READ_ONLY);
                } else {
                    folder.open(Folder.READ_WRITE);
                }

            }
            return folder;
        }

猜你喜欢

转载自dtt3401885.iteye.com/blog/2355833