Java 删除邮件

概要:

本实例实现邮件的接收,并选择接收的邮件是否删除,如果选择是,将删掉所选择的邮件。

| |目录

技术要点

删除邮件的技术要点如下:

  • SetFlag()方法的运用,设Flags.Flag.DELETED标志。

  • Java.mail API的使用技巧。

  • Folder的设置为Folder.READ_WRITE。

  • folder.close(true);的作用。

代码实现

package net.xsoftlab.baike;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
public class Delete_Mail {
	static String username = "xxx@163.com";
	static String password = "xxx";
	static String host = "pop.163.com";
	static String port = "110";
	public static void main(String args[]) throws Exception {
		Properties props = new Properties(); // 获取系统属性
		// 设置 mail server
		props.put("mail.pop3.host", host);
		props.put("mail.pop3.port", port);
		props.put("mail.pop3.auth", "true");// 是否通过验证,ture:需要进行身份验证;false:不需要进行
		Session session = Session.getDefaultInstance(props);// 获取Session
		Store store = session.getStore("pop3"); // 获取Store
		store.connect(host, username, password);
		Folder folder = store.getFolder("INBOX");// 获取 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++) {
			System.out.print("第" + (i + 1) + "封邮件: ");
			System.out.println("发件人:" + message[i].getFrom()[0]);
			System.out.println("日期:" + message[i].getSentDate());
			System.out.println("主题:" + message[i].getSubject());
			System.out.println("你确定要删除此消息吗? [Y to delete][O to Over]");
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					System.in));
			String line = reader.readLine();
			if ("Y".equals(line)) {
				message[i].setFlag(Flags.Flag.DELETED, true);// 注意邮件将被直接删除,而不是保留在服务器的垃圾箱中
			} else if ("O".equals(line)) {
				break;
			} else {
				continue;
			}
		}
		// 关闭连接
		folder.close(true);// 当folder关闭时,标志为DELETED的邮件将会被删除
		store.close();
		System.out.println("此收件夹中剩有" + getNewConnect() + " 封邮件");
	}
	// 创建一个新的连接,用于显示删除邮件后的个数
	public static int getNewConnect() throws Exception {
		Properties props1 = new Properties(); // 获取系统属性
		// 设置 mail server
		props1.put("mail.pop3.host", host);
		props1.put("mail.pop3.port", port);
		props1.put("mail.pop3.auth", "true");// 是否通过验证,ture:需要进行身份验证;false:不需要进行
		Session session1 = Session.getDefaultInstance(props1);// 获取Session
		Store store1 = session1.getStore("pop3"); // 获取Store
		store1.connect("pop.163.com", username, password);
		Folder folder1 = store1.getFolder("INBOX");// 获取 INBOX 文件夹
		folder1.open(Folder.READ_WRITE);// 文件夹设置为可读写
		Message mess[] = folder1.getMessages(); // 获取该文件夹下的所有消息
		return mess.length;
	}
}

程序解读

  1. 通过Session创建Store对象,通过Store对象的getFolder创建Folder对象,并将文件夹设置为可读写状态。

  2. 通过Folder对象的getMessages()获取此文件夹下的所有消息并返回一个Message数组,数组的长度也就是消息的个数。

  3. 使用for循环将Message数组中每个消息中的信息列出。例如:

  4. getFrom()[0]:获取发件人信息。
    getSentDate():获取日期信息。
    getSubject():获取主题信息。
  5. 如果确定将哪条消息删除掉,则通过Message的setFlag()将Flags.Flag.DELETED的状态标识置为true。

  6. 关闭连接folder.close(true)。当folder关闭时,标志为DELETED的邮件将会被删除。

  7. getNewConnect()方法的作用是创建一个新的连接,用于显示删除邮件后的个数,即返回Message的数组长度。


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
  • 全部评论(0)
资料加载中...
已关注 , 取消