All About JAVA javamail的pop3以及IMAP方式读取未读邮件等操作
2015-05-16 12:54
483 查看
/** * 可以在props下设置认证信息,协议和端口信息,超时等信息,这样在store.connect的时候可以根 * 据props里是否设置了认证信息来选择不带参数的connect()或者如下有参数的connect(...)方法 * store.connect(user, password); store.connect(host, user, password); */ Properties props = System.getProperties(); props.setProperty("mail.imap.host", "mail.**.**.cn"); props.setProperty("mail.imap.port", "143"); 具体端口信息由邮件提供商确定 props.setProperty("mail.imap.connectiontimeout", "5000"); props.setProperty("mail.imap.timeout", "5000");
代码正文:
Properties props = System.getProperties(); Store store = null; // 用来存放邮件中文件夹的,可以简单的使用javax.mail.Folder类型, // 如果只是取未读邮件数的话Folder类型就够了 IMAPFolder inbox = null; try { Session session = Session.getDefaultInstance(props, null); //如果使用pop3协议这里imap改成pop3,如果使用ssl连接这里应使用imaps store = session.getStore("imap"); store.connect("mail.**.**.cn", "user","pwd"); System.out.println(store); inbox = (IMAPFolder)store.getFolder("Inbox"); //取得收件箱对象 //如果需要在取得邮件数后将邮件置为已读则这里需要使用READ_WRITE,否则READ_ONLY就可以 inbox.open(Folder.READ_WRITE); // 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 //遍历获取的Message数组获取信息 for (Message message : messages) { //默认返回Message类型对象,因为我需要获取MessageID所以需要做强制 //转换为IMAPMessage类型 IMAPMessage imes = (IMAPMessage)message; //我需要获取的邮件都是纯文本的,所以在这简单的做了判断,不是纯文本的直接跳过了。 //如果需要对不固定的邮件进行读取需要使用message.getContentType()获取邮件 //正文类型,然后根据类型进一步处理 //如果返回“text/plain”或”text/html”为纯文本,如果为”multipart/*”则正文里面可 //能还包含图片等信息 if (!(message.getContent() instanceof String)) continue; Map<String, String> map = new HashMap<String, String>(); map.put("content", (String)message.getContent()); map.put("title", message.getSubject()); //IMAPMessage类型对象可以获取MessageID和UID,两者是有区别的MessageID是 //邮件的唯一标识,不只限于当前邮件系统,UID是当前邮件系统的唯一标识, //另外获取MessageID需要读取邮件,UID不需要读取邮件所以速度更快。 map.put("messageId", imes.getMessageID()); mailInfoList.add(map); //保存我要获取的信息map列表 mesList.add(message); //保存我将要设置为已读的message列表 } //将刚才我获取的邮件设置为已读 if (mesList.size() > 0) { Message[] savedMailMessage = new Message[mesList.size()]; mesList.toArray(savedMailMessage); inbox.setFlags(savedMailMessage, new Flags(Flags.Flag.SEEN),true); } } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (inbox != null) { inbox.close(false); inbox = null; } if (store != null) { store.close(); store = null; } } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
相关文章推荐
- JavaMail通过IMAP和POP3接收未读以及设置已读邮件
- android pop3与imap方式接收邮件(javamail)
- android pop3与imap方式接收邮件(javamail)
- JavaMail通过IMAP和POP3接收未读以及设置已读邮件
- JavaMail通过IMAP和POP3接收未读以及设置已读邮件
- android pop3与imap方式接收邮件(javamail)
- android pop3与imap方式接收邮件(javamail)
- Android pop3与imap方式接收邮件(javamail)
- Android pop3与imap方式接收邮件(javamail)
- 邮件读取协议POP3和IMAP
- javamail定时读取邮箱的未读邮件(imap)
- javaMail2种方式实现,并读取html格式邮件模板
- JavaMail IMAP 和JavaMail Pop3 简介以及使用过程遇到的问题总结
- 【JAVA】Properties文件以及XML文件的读取操作
- Ruby从指定邮箱读取邮件(IMAP/POP3)
- java file to inputstream以及New Document From InputStream读取和写入文件操作实例代码
- java使用http get以及post方式读取网络数据
- Java中的IO操作(文件读取的几种方式)
- [置顶] 【java】javamail简介以及发送邮件
- 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)