JavaMail详解(八)——邮件删除 - 高飞网
138 人阅读

JavaMail详解(八)——邮件删除

2017-07-28 02:09:46

    本节我们看看如何用JavaMail API消息邮件。删除邮件实际上是通过设置邮件的相关标识完成的。不同的消息状态有不同的标识,有些是系统定义的,有些是用户自定义的。预定义的消息标识在类Flags.Flag中,如下:

  • Flags.Flag.ANSWERED
    Flags.Flag.DELETED
    Flags.Flag.DRAFT
    Flags.Flag.FLAGGED
    Flags.Flag.RECENT
    Flags.Flag.SEEN
    Flags.Flag.USER

  • POP协议只支持删除消息。测试发现IMAP协议删除邮件成功。

    基本操作步骤如下:

    1. 获取持有IMAP详情属性的Session对象。我们将使用POP详情查询消息
    2. 创建IMAP的Store对象并连接到Store
    3. 创建Folder对象并以读写模式(READ_WRITE)打开邮件中的相应文件夹
    4. 查询消息
    5. 遍历消息,键入Y或y就删除邮件,通过设置消息对象的Flag,即: setFlag(Flags.Flag.DELETED, true)
    6. 获取消息的所有信息(To、From、Subject、Content)
    7. 将消息标记为DELETE并不会真实地删除,知道我们调用Folder对象的expunge() 方法,或关闭Folder时设置参数expunge 为true。
    8. 关闭store对象。

    创建DeleteEmail类,如下:


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Properties;
    
    import javax.mail.Flags;
    import javax.mail.Folder;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.NoSuchProviderException;
    import javax.mail.Session;
    import javax.mail.Store;
    
    public class DeleteEmail {
    
        public static void delete(String host, String storeType, String user, String password) {
            try {
                //获取Session对象
                Properties properties = new Properties();
                properties.put("mail.store.protocol", "imap");
                properties.put("mail.imap.host", host);
                properties.put("mail.imap.port", "143");
                properties.put("mail.imap.starttls.enable", "true");
                Session emailSession = Session.getDefaultInstance(properties);
                // emailSession.setDebug(true);
    
                //创建IMAP的Store对象并连接到IMAP服务
                Store store = emailSession.getStore("imap");
    
                store.connect(host, user, password);
    
                //创建Folder对象并以读写模式打开
                Folder emailFolder = store.getFolder("INBOX");
                emailFolder.open(Folder.READ_WRITE);
    
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                //查询Folder中的消息并打印
                Message[] messages = emailFolder.getMessages();
                System.out.println("messages.length---" + messages.length);
                for (int i = 0; i < messages.length; i++) {
                    Message message = messages[i];
                    System.out.println("---------------------------------");
                    System.out.println("Email Number " + (i + 1));
                    System.out.println("Subject: " + message.getSubject());
                    System.out.println("From: " + message.getFrom()[0]);
    
                    String subject = message.getSubject();
                    System.out.print("Do you want to delete this message [y/n] ? ");
                    String ans = reader.readLine();
                    if ("Y".equals(ans) || "y".equals(ans)) {
                        //调协消息标识为true表示消息消息
                        message.setFlag(Flags.Flag.DELETED, true);
                        System.out.println("Marked DELETE for message: " + subject);
                    } else if ("n".equals(ans)) {
                        break;
                    }
                }
                //关闭folder时设置expunges为true表示移除标识为删除的消息
                emailFolder.close(true);
                store.close();
            } catch (NoSuchProviderException e) {
                e.printStackTrace();
            } catch (MessagingException e) {
                e.printStackTrace();
            } catch (IOException io) {
                io.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
    
            String host = "imap.163.com";
            String mailStoreType = "imap";
            String username = "xxxxxx@163.com";
            String password = "xxxxxx";
    
            delete(host, mailStoreType, username, password);
    
        }
    
    }





    还没有评论!
    54.81.157.56