在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Java网络编程 → JavaMail 具备垃圾邮件过滤功能的邮箱

JavaMail 具备垃圾邮件过滤功能的邮箱

Java网络编程

下载此实例
  • 开发语言:Java
  • 实例大小:3.32M
  • 下载次数:20
  • 浏览次数:161
  • 发布时间:2019-06-14
  • 实例类别:Java网络编程
  • 发 布 人:chenxiaolan
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 邮件 java 邮箱

实例介绍

【实例简介】使用Java完成的简单邮箱系统,界面由Java Swing实现,具有以下功能: 1、邮件收发等邮箱基本功能 2、可设置黑名单、白名单,并过滤邮件 3、使用朴素贝叶斯算法检测评估邮件是否为垃圾邮件

【实例截图】

from clipboard



【核心代码】


package frame;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyVetoException;

import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

import utils.ClassNameTreeCellRenderer;
import utils.EditorUtils;
import utils.FrameFactory;
import utils.ReadLinkmanXMl;
import utils.ReceiveMailTable;

public class MainFrame extends JFrame implements ActionListener, MouseListener {
	private static final long serialVersionUID = 1L;
	private static JDesktopPane desktopPane = null;// 用于创建多文档界面或虚拟桌面的容器
	public static MainFrame MAINFRAME;
	private JTree tree;// 树形图
	private JList jl;// 联系人列表
	private JPanel panel, panelframe;// panelframe左半部界面
	private JLabel labelbackground;
	private JScrollPane scrollPane;
	private JMenuItem exitMI = null, newMailMI = null, sendedMI = null,
			receiveMI = null, recycleMI = null, refreshMI = null, antiSpamMI = null, 
			blacklistMI = null, whitelistMI = null;
	private JButton addLinkmanButton = null;// 添加联系人按钮
	private JMenu mailMenu = null;
	private JMenu antiSpamMenu = null;
	private ReadLinkmanXMl readLinkman = null;
	

	// 初始化界面配置
	public void jFrameValidate() {
		Toolkit tk = getToolkit();// 获得屏幕的宽和高
		Dimension dim = tk.getScreenSize();
		this.setBounds(dim.width / 2 - 420, dim.height / 2 - 350, 850, 678);
		validate();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public MainFrame() {
		super("电子邮件");
		MAINFRAME = this;
		this.setIconImage(EditorUtils.createIcon("email.png").getImage());
		desktopPane = new JDesktopPane();
		jFrameValidate();// 初始化界面
		JMenuBar menuBar = new JMenuBar();
		this.setJMenuBar(menuBar);

		final JMenu fileMenu = new JMenu("文件(F)");
		mailMenu = new JMenu("邮件(M)");
		antiSpamMenu = new JMenu("反垃圾邮件");
		menuBar.add(fileMenu);
		menuBar.add(mailMenu);
		menuBar.add(antiSpamMenu);

		exitMI = addMenuItem(fileMenu, "退出", "exit.gif");// 退出菜单项的初始化
		newMailMI = addMenuItem(mailMenu, "新建邮件", "newMail.gif");// 新建邮件菜单项的初始化
		sendedMI = addMenuItem(mailMenu, "已发送", "sended.png");// 已发送邮件菜单项的初始化
		receiveMI = addMenuItem(mailMenu, "收件箱", "receive.png");// 收件箱邮件菜单项的初始化
		recycleMI = addMenuItem(mailMenu, "已删除", "deleted.png");// 已删除邮件菜单项的初始化
		refreshMI = addMenuItem(mailMenu, "刷新收件箱", "refresh.jpg");// 已删除邮件菜单项的初始化
		antiSpamMI = addMenuItem(antiSpamMenu, "反垃圾邮件设置", "refresh.jpg");
		blacklistMI = addMenuItem(antiSpamMenu, "黑名单设置","refresh.jpg");
		whitelistMI = addMenuItem(antiSpamMenu, "白名单设置","refresh.jpg");

		// 构建树形节点
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("电子邮件系统");
		DefaultMutableTreeNode addressee = new DefaultMutableTreeNode("收件夹");
		DefaultMutableTreeNode send = new DefaultMutableTreeNode("发件夹");
		DefaultMutableTreeNode spam = new DefaultMutableTreeNode("垃圾邮件");
		DefaultMutableTreeNode AlreadySend = new DefaultMutableTreeNode("已发送邮件");
		DefaultMutableTreeNode delete = new DefaultMutableTreeNode("已删除邮件");
		root.add(send);
		root.add(addressee);
		root.add(spam);
		root.add(AlreadySend);
		root.add(delete);
		

		tree = new JTree(root);
		tree.addMouseListener(this);// 为树形节点注册鼠标事件
		tree.setPreferredSize(new Dimension(160, 150));
		// 重新渲染树形节点
		ClassNameTreeCellRenderer render = new ClassNameTreeCellRenderer();
		tree.setCellRenderer(render);
		// 联系人面板
		panel = new JPanel();
		panel.setLayout(new BorderLayout());
		panel.setPreferredSize(new Dimension(160, 300));
		// 界面左半部面板
		panelframe = new JPanel();
		panelframe.setLayout(new BorderLayout());
		panelframe.add(panel, BorderLayout.CENTER);
		panelframe.add(tree, BorderLayout.NORTH);

		addLinkmanButton = new JButton();
		addLinkmanButton.setText("联系人(C)");
		addLinkmanButton.setIcon(EditorUtils.createIcon("linkman.gif"));
		panel.add(addLinkmanButton, BorderLayout.NORTH);
		addLinkmanButton.addActionListener(this);// 注册添加联系人事件
		readLinkman = new ReadLinkmanXMl();
		jl = readLinkman.makeList();// 返回联系人列表
		jl.addMouseListener(this);// 添加联系人列表双击事件
		scrollPane = new JScrollPane();
		panel.add(scrollPane, BorderLayout.CENTER);
		scrollPane.setViewportView(jl);// 在滚动面板中添加联系人
		validate();

		labelbackground = new JLabel();
		labelbackground.setIcon(null); // 窗体背景
		desktopPane.addComponentListener(new ComponentAdapter() {
			public void componentResized(final ComponentEvent e) {
				Dimension size = e.getComponent().getSize();
				labelbackground.setSize(e.getComponent().getSize());
				labelbackground.setText("<html><img width="   size.width
						  " height="   size.height   " src='"
						  this.getClass().getResource("/main.png")
						  "'></html>");
			}
		});
		desktopPane.add(labelbackground, new Integer(Integer.MIN_VALUE));

		// 添加一个分割窗口
		JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
				panelframe, desktopPane);
		splitPane.setOneTouchExpandable(true);// 在分隔条上提供一个 UI 小部件来快速展开/折叠分隔条
		splitPane.setDividerSize(10);// 设置分隔条的大小
		getContentPane().add(splitPane, BorderLayout.CENTER);
	}

	// 返回新建菜单项
	private JMenuItem addMenuItem(JMenu menu, String name, String icon) {
		// 新建邮件菜单项的初始化
		JMenuItem menuItem = new JMenuItem(name, EditorUtils.createIcon(icon));
		menuItem.addActionListener(this);// 监听退出菜单项事件
		menu.add(menuItem);
		return menuItem;
	}

	// 添加子窗体的方法
	public static void addIFame(JInternalFrame iframe) {
		JInternalFrame[] frames = desktopPane.getAllFrames();
		try {
			for (JInternalFrame ifm : frames) {
				if (ifm.getTitle().equals(iframe.getTitle())) {
					desktopPane.selectFrame(true);
					ifm.toFront();
					ifm.setSelected(true);
					return;
				}
			}
			desktopPane.add(iframe);
			iframe.setSelected(true);
			iframe.toFront();
		} catch (PropertyVetoException e) {
			e.printStackTrace();
		}
	}

	// action事件的处理
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == exitMI) {
			System.exit(0);// 退出系统
		} else if (e.getSource() == addLinkmanButton) {
			addIFame(FrameFactory.getFrameFactory().getAddLinkManFrame());// 联系人列表
		} else if (e.getSource() == newMailMI) {// 新建邮件
			addIFame(FrameFactory.getFrameFactory().getSendFrame());// 发件夹
		} else if (e.getSource() == itemPopupOne || e.getSource() == refreshMI) {// 右键刷新收件列表
			ReceiveMailTable.getMail2Table().startReceiveMail();// 右键刷新收件列表
		} else if (e.getSource() == sendedMI) {// 已发送
			addIFame(FrameFactory.getFrameFactory().getSendedFrame());// 已发送
		} else if (e.getSource() == receiveMI) {// 收邮件
			addIFame(FrameFactory.getFrameFactory().getReceiveFrame());// 收邮件
		} else if (e.getSource() == recycleMI) {// 已删除
			addIFame(FrameFactory.getFrameFactory().getRecycleFrame());// 收邮件
		} else if (e.getSource() == antiSpamMI) {
			addIFame(FrameFactory.getFrameFactory().getAntiSpamSettingFrame());
		} else if (e.getSource() == blacklistMI) {
			addIFame(FrameFactory.getFrameFactory().getBlacklistFrame()); 
		} else if (e.getSource() == whitelistMI) {
			addIFame(FrameFactory.getFrameFactory().getWhitelistFrame());
		}

	}

	private SendFrame sendFrame = null;// 发送邮件对象
	public JMenuItem itemPopupOne = null;// 鼠标右键第一个选项

	@Override
	public void mouseClicked(MouseEvent e) {
		// 树形节点中的单击事件
		DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
				.getLastSelectedPathComponent();
		if (e.getSource() == tree && e.getButton() != 3 && e.getButton() != 2) {
			if (selectedNode == null)
				return;
			else if (selectedNode.toString().equals("发件夹")) {
				sendFrame = FrameFactory.getFrameFactory().getSendFrame();
				addIFame(sendFrame);// 发件夹
			} else if (selectedNode.toString().equals("收件夹")) {
				addIFame(FrameFactory.getFrameFactory().getReceiveFrame());// 收件夹
			} else if(selectedNode.toString().equals("垃圾邮件")){
				addIFame(FrameFactory.getFrameFactory().getSpamFrame());
			}else if (selectedNode.toString().equals("已发送邮件")) {
				addIFame(FrameFactory.getFrameFactory().getSendedFrame());// 已发送邮件
			} else if (selectedNode.toString().equals("已删除邮件")) {
				addIFame(FrameFactory.getFrameFactory().getRecycleFrame());// 已删除邮件
			}
		} else if (e.getSource() == jl && e.getClickCount() == 2) {// 双击联系人事件
			int index = jl.getSelectedIndex();
			if (sendFrame != null && sendFrame.isSelected()) {// 如果发送邮件界面被初始化并且被激活
				sendFrame.addLinkman(readLinkman.findLinkman(index));
			}
		} else if (e.getButton() == MouseEvent.BUTTON3 && e.getSource() == tree) {// 收件箱右键刷新
			if (selectedNode == null)
				return;
			else if ("收件夹".equals(selectedNode.toString())) {
				JPopupMenu popup = new JPopupMenu();
				itemPopupOne = new JMenuItem("刷新收件箱",
						EditorUtils.createIcon("refresh.jpg"));
				itemPopupOne.addActionListener(this);
				popup.add(itemPopupOne);
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		}
	}

	public void mouseEntered(MouseEvent e) {
	}

	public void mouseExited(MouseEvent e) {
	}

	public void mousePressed(MouseEvent e) {
	}

	public void mouseReleased(MouseEvent e) {
	}
}


标签: 邮件 java 邮箱

实例下载地址

JavaMail 具备垃圾邮件过滤功能的邮箱

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警