簡體   English   中英

使用javamail api從gmail服務器刪除電子郵件

[英]deleting a email from gmail server with javamail api

import com.sun.mail.pop3.POP3Folder;
import com.sun.mail.pop3.POP3SSLStore;
import javax.mail.Session;
import javax.mail.Flags;
import javax.mail.Message;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.StringTokenizer;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;
import java.io.File;
import java.io.ObjectOutputStream;
import java.io.Writer;
import java.net.URL;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.Store;
import javax.mail.Folder;
import java.util.Properties;
import javax.mail.URLName;


/**
 * This class is responsible for deleting e-mails.
 *
 * @author <a href="mailto:fzammetti@omnytex.com">Frank W. Zammetti</a>.
 */public class deletemail {

    private static final String SMTP_HOST_NAME = "smtp.gmail.com";
    private static final int SMTP_HOST_PORT = 465;
    private static final String SMTP_AUTH_USER = "examplemail@gmail.com";
    private static final String SMTP_AUTH_PWD  = "examplepassword";
 private Session session;
    private POP3SSLStore store;
    private String username;
    private String password;
    private POP3Folder folder;
        URLName  url;
    public static void main(String[] args) throws Exception{
       new deletemail().test();
    }

    public void test() throws Exception{
       try{
        Properties pop3props = new Properties();
        //----------------------------------------------
          String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        Properties pop3Props = new Properties();
        pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
        pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
        pop3Props.setProperty("mail.pop3.port", "995");
        pop3Props.setProperty("mail.pop3.socketFactory.port", "995");
        username="examplemail@gmail.com";
        password="examplepassword";
        url = new URLName("pop3", "pop.gmail.com", 995, "", username, password);
        session = Session.getInstance(pop3Props, null);
        store = new POP3SSLStore(session, url);
        store.connect();
        folder = (POP3Folder) store.getFolder("INBOX");
        folder.open(Folder.READ_WRITE);
       Message message[] = folder.getMessages();
         System.out.println(message.length);
    for (int i=0, n=message.length; i<n; i++) {
         message[i].setFlag(Flags.Flag.DELETED, true);
        System.out.println("hello world");

    }
         folder.close(true);
        store.close();
   }
     catch (Exception e) {

      e.printStackTrace();

    }
 finally {
      try {
        if (folder != null) {
          folder.close(true);
        }
        if (store != null) {
          store.close();
        }
      } catch (Exception e) { }

  }
    }
}

在執行此程序消息后,首先讓輸入框包含 10 條消息 message.length=10。 長度被減少到 0,但是當我打開我的 Gmail 帳戶時,消息仍然存在並且它們不會從收件箱中刪除

問題是 GMail 沒有遵循刪除電子郵件的 IMAP 約定。

根據https://javaee.github.io/javamail/FAQ#gmaildelete,您必須:

  1. 使用標記[Gmail]/Trash標記[Gmail]/Trash
  2. 導航到該標簽並將該電子郵件的標志DELETED設置為 true,
  3. 關閉文件夾(刪除標志設置為 true)。

假設您在數組中有電子郵件,您必須執行以下操作:

        Folder trashFolder = this.open("[Gmail]/Trash", true);
        for (Message m : messages) {
            m.getFolder().copyMessages(new Message[]{m}, trashFolder);
        }
        this.close(trashFolder, true);

        trashFolder = this.open("[Gmail]/Trash", true);
        for (Message m : trashFolder.getMessages()) {
            m.setFlag(Flags.Flag.DELETED, true);
        }
        this.close(trashFolder, true);

這個Gmail 幫助頁面可能解釋了發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM