如何使用Java邮件永久删除Gmail中的电子邮件(POP3 Client& IMAP)

时间:2017-06-12 11:05:45

标签: java javamail imap pop3

我一直在使用java邮件( POP3客户端和IMAP )来自动执行Gmail操作。其中一项操作是删除邮件,我使用以下代码 -

public void deleteInboxMasseges() throws IOException, MessagingException
{
    store = getConnection(EMAIL_USERNAME, EMAIL_PASSWORD);
        if (store != null)
        {
            int inboxMassegeCount = inbox.getMessageCount();
            Message[] messages = inbox.getMessages();
            for (int i = 0; i < inboxMassegeCount; i++)
            {
                messages[i].setFlag(Flags.Flag.DELETED, true);
            }
            inbox.expunge();
        }
    }

邮件将从&#34; 收件箱&#34;中删除但它可用于&#34; 所有邮件&#34;只有不在&#34; 垃圾箱&#34;夹。我想永久删除它。有没有直接删除邮件的方法,而不是从&#34; 收件箱&#34;

删除邮件?

3 个答案:

答案 0 :(得分:3)

不幸的是,这是一个多步骤的过程,需要使用IMAP,而不是POP。要从GMail中永久删除某些内容,您需要将其移至“废纸篓”,然后将其从废纸篓中删除。它支持MOVE扩展,所以这不是太糟糕。您还必须发现垃圾文件夹名称,可能使用LIST,因为它已本地化。

a001 UID MOVE xxx "[Gmail]/Trash"
* OK [MOVEUID xxxxxxx yyy] Message moved
a002 SELECT "[Gmail]/Trash"
a003 UID STORE yyy +FLAGS (\Deleted)
a004 UID EXPUNGE yyy

然后它会真的消失。

对于大多数用户来说,将其移至垃圾箱就足够了。它会在以后消失。

答案 1 :(得分:0)

您可能会在Gmail帐户设置中解决此问题。

Gmail在设置页面,转发和POP / IMP 标签中提供以下选项:

当邮件被标记为已删除并从最后一个可见的IMAP文件夹中删除时:

  • 归档邮件(默认)
  • 将邮件移至“已删除邮件”
  • 立即删除邮件

尝试在帐户中设置最后一个选项(立即删除邮件)并再次运行您的代码。

祝你好运。

答案 2 :(得分:0)

请按照以下步骤使用JavaMail API从Gmail永久删除邮件

  1. 连接到商店
  2. 以“读/写”模式打开文件夹收件箱。
  3. 以“读/写”模式打开文件夹。
  4. 从收件箱中获取消息。
  5. 将邮件从收件箱复制到垃圾箱。
  6. 将所有邮件的标志设置为DELETED。
  7. 清除文件夹。
  8. 关闭商店

    def deleteMessages(String userName, String password) {
    
          Properties properties = new Properties();
    
          String host = "imap.gmail.com";
          String port = "993";
          String mailStoreType = "pop3";
    
          // server setting
          properties.put("mail.imap.host", host);
          properties.put("mail.imap.port", port);
    
          // SSL setting
          properties.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
          properties.setProperty("mail.imap.socketFactory.fallback", "false");
          properties.setProperty("mail.imap.socketFactory.port", String.valueOf(port));
    
          Session session = Session.getDefaultInstance(properties);
    
          try {
              // connects to the message store
              Store store = session.getStore("imap");
              store.connect(userName, password);
    
              // opens the inbox folder
              Folder folderInbox = store.getFolder("INBOX");
              folderInbox.open(Folder.READ_WRITE);
    
              //opens the trash folder
              Folder folderBin = store.getFolder("[Gmail]/Bin");
              folderBin.open(Folder.READ_WRITE);
    
              // fetches new messages from server
              Message[] arrayMessages = folderInbox.getMessages();
    
              //Copy messages from inbox to Trash
              folderInbox.copyMessages(arrayMessages, folderBin)
    
              arrayMessages = folderBin.getMessages();
    
              for (int i = 0; i < arrayMessages.length; i++) {
                     Message message = arrayMessages[i];
                     String subject = message.getSubject();
                     message.setFlag(Flags.Flag.DELETED, true);
    
              }
    
              // expunges the folder to remove messages which are marked deleted
              boolean expunge = true;
              folderBin.close(expunge);
              folderInbox.close(expunge);
    
              // disconnect
              store.close();
          } catch (NoSuchProviderException ex) {
    
              System.out.println("No provider.");
              ex.printStackTrace();
          } catch (FolderNotFoundException ex) {
    
              System.out.println("Folder Not Found")
              ex.printStackTrace();
          } catch (MessagingException ex) {
    
               System.out.println("Could not connect to the message store.");
               ex.printStackTrace();
          }
    }