zoukankan      html  css  js  c++  java
  • javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】(javamail API电子邮件实例)

    前言:

      JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html

      本章可能是讲解javamail的最后一篇了,上次更新完查看方法后,本打算周末更新的,没想今天周五挺闲,就地正法算了...就赶紧再下班前写完了。阅读本章节前建议阅读之前章节,因为这章是在之前的基础上增加的业务方法,不看之前的可能有点云里雾里。  点我前往

      邮件标志:是指给邮件message对象设置一个Flag内部类里的属性字段,标志类型会在代码中给出。

      本章节演示的是给邮件一个删除标志,来实现邮件的删除操作。

      代码走起//////


    MarkEmailFunction  标记邮件业务类

    package com.java.mail;
    
    import java.io.UnsupportedEncodingException;
    import javax.mail.Flags;
    import javax.mail.Flags.Flag;
    import javax.mail.Folder;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    
    /**
     * 标记邮件业务类(包涵删除)
     * @author liuyt
     * @date   2014-10-31 下午3:04:39
     * bolgs   http://www.cnblogs.com/liuyitian/
     */
    public class MarkEmailFunction extends LookEmailService{
        /**
         * 因为我继承了查看业务类,所以这里我在获取邮件的时候可以直接调用父类的方法进行获取,减少代码量
         * @throws UnsupportedEncodingException
         * @throws MessagingException
         */
        public MarkEmailFunction() throws UnsupportedEncodingException,
                MessagingException {
        }
        
        /**
         * 标记邮件方法(其实在上一章有接触,就是Folder.READ_ONLY以只读方式打开邮件夹)
         * 每个邮件消息 message都有对应的实时标志,有服务器定义的,也有用户自定义的
         * 服务器预定义的都在内部类Flags.Flag里以常量方式存在
         * @param flag    状态标识
         * @throws MessagingException 
         * @throws UnsupportedEncodingException 
         */
        public void markEmail(Flag flag) throws UnsupportedEncodingException, MessagingException {
            
            /** 拿到一封邮件,这里获取的是收件箱内最新一封邮件,做删除操作,其他方法自行测试 */
            Message message = this.getMessageByIndex(this.getAllMessage().length);
            message.setFlag(Flags.Flag.DELETED, true);    // true为设置,false为取消
            /**
             * 在源码中找到的标识,仅供参考
             * ANSWERED        回复
             * DELETED         删除
             * DRAFT           草稿
             * FLAGGED         已读(个人理解)
             * RECENT          ..
             * SEEN            ..
             * USER            ..(还没明白-.-)
             */
            // 重要步骤,现在邮件还没真正删除,只是有一个删除的标记,你需要像刷新流一样刷新邮件夹
            // 上节说到false不刷新,true刷新,此时邮件删除(重要邮件请慎重操作)
            this.getFolder().close(true);    
        }
        
        /**
         * 这里需要重写父类的初始化文件夹方法,因为上一章节为了安全性,我们是以只读方式打开邮件夹的
         * 这里要把上一章节父类的属性改为protected,子类可访问的(这里不再贴出代码)
         */
        @Override
        public void initStoreAndFolder() throws UnsupportedEncodingException,
                MessagingException {
            this.emailService = new EmailServiceEnity("", "",EmailServiceEnity.MAIL_PROTOCOL_POP3);
            this.store = emailService.getSession().getStore(emailService.getMailProtocol());
            store.connect(emailService.getHostPort(), EmailServiceEnity.username, EmailServiceEnity.password);
            folder = store.getFolder("INBOX");
            // 上面方法不再复述,不懂的看上一章节,这里只需更改下面一个打开方法为READ_WRITE
            folder.open(Folder.READ_WRITE);
        }
        
        /**** 简单main方法测试  ****/
        public static void main(String[] args) {
            MarkEmailFunction mark;
            try {
                mark = new MarkEmailFunction();
                // 注意Flag为静态内部类,要用外部类来获取
                mark.markEmail(Flags.Flag.DELETED);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    }

    总结:

    •   邮件的标记要建立的查看的基础上,所以直接继承了查看业务类
    •   要对邮件进行删除操作时要以读写(READ_WRITE)方式打开Folder邮件夹
    •   对邮件添加标记后,记得在关闭邮件夹的时候刷新邮件夹(具体为参数传:true)
    •   只要之前的都练习过,在这里就不啰嗦了,........此处省略.......1w字.........

    javamail API 系列篇:   

    1. javamail模拟邮箱功能发送电子邮件-基础实战篇
    2. javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】
    3. javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】
    4. javamail模拟邮箱功能--邮件回复-中级实战篇【邮件回复方法】
    5. javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】

                                  写作不易,难免有疏漏和错误,还请慷慨指正,觉得有帮助还请推荐哦

      ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4065654.html


                                          每天多学一点点     代码少敲一点点

  • 相关阅读:
    学习Python的体会 (1)
    李敖的管理经
    《inside the c++ object model》读书笔记 之五 构造,解构,拷贝语意学
    《inside the c++ object model》读书笔记 之四 Function 语意学
    《inside the c++ object model》读书笔记 之三:Data语意学
    《inside the c++ object model》读书笔记 之六 执行期语意学
    排序算法插入排序/冒泡排序
    《inside the c++ object model》读书笔记 之七 站在对象模型的尖端
    《inside the c++ object model》读书笔记 之二:构造函数
    《inside the c++ object model》读书笔记 之一:对象
  • 原文地址:https://www.cnblogs.com/liuyitian/p/4065654.html
Copyright © 2011-2022 走看看