JavaMail API - Xóa email

Trong chương này, chúng ta sẽ xem cách xóa email bằng JavaMail API. Xóa tin nhắn liên quan đến việc làm việc với các Cờ liên quan đến tin nhắn. Có các cờ khác nhau cho các trạng thái khác nhau, một số do hệ thống xác định và một số do người dùng xác định. Các cờ xác định trước được định nghĩa trong Flags.Flag lớp bên trong và được liệt kê bên dưới:

  • Flags.Flag.ANSWERED

  • Flags.Flag.DELETED

  • Flags.Flag.DRAFT

  • Flags.Flag.FLAGGED

  • Flags.Flag.RECENT

  • Flags.Flag.SEEN

  • Flags.Flag.USER

Giao thức POP chỉ hỗ trợ xóa tin nhắn.

Các bước cơ bản sau trong chương trình xóa là:

  • Lấy đối tượng Session với chi tiết máy chủ POP và SMPT trong thuộc tính. Chúng tôi sẽ cần chi tiết POP để truy xuất tin nhắn và chi tiết SMPT để gửi tin nhắn.

  • Tạo đối tượng cửa hàng POP3 và kết nối với cửa hàng.

  • Tạo đối tượng Thư mục và mở thư mục thích hợp trong hộp thư của bạn ở chế độ READ_WRITE.

  • Lấy tin nhắn từ thư mục hộp thư đến.

  • Lặp lại các thông báo và nhập "Y" hoặc "y" nếu bạn muốn xóa thông báo bằng cách gọi phương thức setFlag (Flags.Flag.DELETED, true) trên đối tượng Message.

  • Các thư được đánh dấu DELETED sẽ không thực sự bị xóa, cho đến khi chúng ta gọi phương thức expunge () trên đối tượng Folder hoặc đóng thư mục với expunge được đặt thành true.

  • Đóng đối tượng cửa hàng.

Tạo lớp Java

Tạo tệp lớp java ForwardEmail, nội dung của nó như sau:

package com.tutorialspoint;

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 pop3Host, String storeType, String user,
      String password) 
   {
      try 
      {
         // get the session object
         Properties properties = new Properties();
         properties.put("mail.store.protocol", "pop3");
         properties.put("mail.pop3s.host", pop3Host);
         properties.put("mail.pop3s.port", "995");
         properties.put("mail.pop3.starttls.enable", "true");
         Session emailSession = Session.getDefaultInstance(properties);
         // emailSession.setDebug(true);

         // create the POP3 store object and connect with the pop server
         Store store = emailSession.getStore("pop3s");

         store.connect(pop3Host, user, password);

         // create the folder object and open it
         Folder emailFolder = store.getFolder("INBOX");
         emailFolder.open(Folder.READ_WRITE);

         BufferedReader reader = new BufferedReader(new InputStreamReader(
            System.in));
         // retrieve the messages from the folder in an array and print it
         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)) {
	       // set the DELETE flag to true
	       message.setFlag(Flags.Flag.DELETED, true);
	       System.out.println("Marked DELETE for message: " + subject);
            } else if ("n".equals(ans)) {
	       break;
            }
         }
         // expunges the folder to remove messages which are marked deleted
         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 = "pop.gmail.com";// change accordingly
      String mailStoreType = "pop3";
      String username = "[email protected]";// change accordingly
      String password = "*****";// change accordingly

      delete(host, mailStoreType, username, password);

   }

}
Bạn có thể bật gỡ lỗi bằng cách bỏ ghi chú câu lệnh emailSession.setDebug (true);

Biên dịch và Chạy

Bây giờ lớp của chúng ta đã sẵn sàng, chúng ta hãy biên dịch lớp trên. Tôi đã lưu lớp DeleteEmail.java vào thư mục:/home/manisha/JavaMailAPIExercise. Chúng tôi cần các chum javax.mail.jaractivation.jar trong classpath. Thực thi lệnh bên dưới để biên dịch lớp (cả hai lọ đều được đặt trong thư mục / home / manisha /) từ dấu nhắc lệnh:

javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: DeleteEmail.java

Bây giờ lớp đã được biên dịch, hãy thực thi lệnh sau để chạy:

java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: DeleteEmail

Xác minh đầu ra

Bạn sẽ thấy thông báo sau trên bảng điều khiển lệnh:

messages.length---1
---------------------------------
Email Number 1
Subject: Testing
From: ABC <[email protected]>
Do you want to delete this message [y/n] ? y
Marked DELETE for message: Testing