⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewpanel.java

📁 一个java实现的邮件服务器系统 使用邮件客户端工具
💻 JAVA
字号:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.Vector;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;

public class ViewPanel extends JPanel {

	private javax.swing.JSplitPane jSplitPane = null;
	private javax.swing.JScrollPane jsprecieveTree = null;
	private javax.swing.JScrollPane jspsaveTree = null;
	private javax.swing.JTextField textShowFrom = null;
	private javax.swing.JTextField textShowTo = null;
	private javax.swing.JTextField textShowSubject = null;
	private javax.swing.JTextField textShowEnclosure = null;
	private javax.swing.JScrollPane jspShowText = null;
	private javax.swing.JTextField textShowDate = null;
	private javax.swing.JTextArea jtaShowText = null;
	private javax.swing.JButton jbtnRecieve = null;
	private javax.swing.JProgressBar jprgbRecieve = null;

	Vector recieveVector = new Vector();
	Vector saveVector = new Vector();

	//JTree recieveTree;
	JTree recieveTree = null;
	DefaultMutableTreeNode recieveNode; // recieveTree root
	DefaultTreeModel recieveModel;
	DefaultMutableTreeNode node;

	//JTree saveTree;
	JTree saveTree = null;
	DefaultMutableTreeNode saveNode; //sendTree root or rather saveTree root
	DefaultTreeModel saveModel;
	MessageProcess processM = new MessageProcess();

	/**/
	public ViewPanel() {
		super();
		initialize();
	}
	/**/
	private void initialize() {
		recieveNode = new DefaultMutableTreeNode("Mail Box");
		recieveModel = new DefaultTreeModel(recieveNode);
		recieveTree = new JTree(recieveModel);
		recieveTree.setEditable(false);
		recieveTree.getSelectionModel().setSelectionMode(
			TreeSelectionModel.SINGLE_TREE_SELECTION);
		recieveTree.setShowsRootHandles(true);
		recieveTree.addTreeSelectionListener(new recieveTreeListener());

		saveNode = new DefaultMutableTreeNode("Saved Mail");
		saveModel = new DefaultTreeModel(saveNode);
		saveTree = new JTree(saveModel);
		saveTree.setEditable(false);
		saveTree.getSelectionModel().setSelectionMode(
			TreeSelectionModel.SINGLE_TREE_SELECTION);
		saveTree.setShowsRootHandles(true);
		saveTree.addTreeSelectionListener(new saveTreeListener());

		this.setLayout(null);
		this.add(getJSplitPane(), null);
		this.add(getTextShowFrom(), null);
		this.add(getTextShowTo(), null);
		this.add(getTextShowSubject(), null);
		this.add(getTextShowEnclosure(), null);
		this.add(getJspShowText(), null);
		this.add(getTextShowDate(), null);
		this.add(getJbtnRecieve(), null);
		this.add(getJprgbRecieve(), null);
		this.setSize(384, 385);
	}

	/**/
	private javax.swing.JSplitPane getJSplitPane() {
		if (jSplitPane == null) {
			jSplitPane = new javax.swing.JSplitPane();
			jSplitPane.setTopComponent(getJsprecieveTree());
			jSplitPane.setBottomComponent(getJspsaveTree());
			jSplitPane.setBounds(20, 10, 110, 250);
			jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
			jSplitPane.setDividerSize(8);
			jSplitPane.setDividerLocation(130);
		}
		return jSplitPane;
	}

	/**/
	private javax.swing.JScrollPane getJsprecieveTree() {
		if (jsprecieveTree == null) {
			jsprecieveTree = new javax.swing.JScrollPane();
			jsprecieveTree.setViewportView(getRecieveTree());
		}
		return jsprecieveTree;
	}

	/**/
	private javax.swing.JScrollPane getJspsaveTree() {
		if (jspsaveTree == null) {
			jspsaveTree = new javax.swing.JScrollPane();
			jspsaveTree.setViewportView(getSaveTree());
		}
		return jspsaveTree;
	}

	/**/
	javax.swing.JTree getRecieveTree() {
		return recieveTree;
	}

	/**/
	javax.swing.JTree getSaveTree() {
		return saveTree;
	}

	/**/
	private javax.swing.JTextField getTextShowFrom() {
		if (textShowFrom == null) {
			textShowFrom = new javax.swing.JTextField();
			textShowFrom.setBounds(166, 13, 194, 24);
			textShowFrom.setText("From:");
			textShowFrom.setEditable(false);
			textShowFrom.setName("textShowFrom");
			textShowFrom.setForeground(java.awt.SystemColor.textHighlight);
			textShowFrom.setBackground(java.awt.Color.pink);
		}
		return textShowFrom;
	}

	/**/
	private javax.swing.JTextField getTextShowTo() {
		if (textShowTo == null) {
			textShowTo = new javax.swing.JTextField();
			textShowTo.setBounds(166, 39, 194, 24);
			textShowTo.setEditable(false);
			textShowTo.setForeground(java.awt.SystemColor.textHighlight);
			textShowTo.setText("To:");
			textShowTo.setBackground(java.awt.Color.pink);
		}
		return textShowTo;
	}

	/**/
	private javax.swing.JTextField getTextShowSubject() {
		if (textShowSubject == null) {
			textShowSubject = new javax.swing.JTextField();
			textShowSubject.setBounds(166, 65, 194, 24);
			textShowSubject.setBackground(java.awt.Color.pink);
			textShowSubject.setEditable(false);
			textShowSubject.setForeground(java.awt.SystemColor.textHighlight);
			textShowSubject.setText("Subject:");
		}
		return textShowSubject;
	}

	/**/
	private javax.swing.JTextField getTextShowEnclosure() {
		if (textShowEnclosure == null) {
			textShowEnclosure = new javax.swing.JTextField();
			textShowEnclosure.setBounds(166, 117, 194, 24);
			textShowEnclosure.setForeground(java.awt.SystemColor.textHighlight);
			textShowEnclosure.setEditable(false);
			textShowEnclosure.setBackground(java.awt.Color.pink);
			textShowEnclosure.setText("Enclosure:");
		}
		return textShowEnclosure;
	}

	/**/
	private javax.swing.JScrollPane getJspShowText() {
		if (jspShowText == null) {
			jspShowText = new javax.swing.JScrollPane();
			jspShowText.setViewportView(getJtaShowText());
			jspShowText.setBounds(146, 147, 220, 196);
		}
		return jspShowText;
	}

	/**/
	private javax.swing.JTextField getTextShowDate() {
		if (textShowDate == null) {
			textShowDate = new javax.swing.JTextField();
			textShowDate.setBounds(166, 91, 194, 24);
			textShowDate.setBackground(java.awt.Color.pink);
			textShowDate.setEditable(false);
			textShowDate.setForeground(java.awt.SystemColor.textHighlight);
			textShowDate.setText("Date:");
		}
		return textShowDate;
	}

	/**/
	private javax.swing.JTextArea getJtaShowText() {
		if (jtaShowText == null) {
			jtaShowText = new javax.swing.JTextArea();
			jtaShowText.setForeground(java.awt.SystemColor.textHighlight);
			jtaShowText.setEditable(true);
			jtaShowText.setBackground(java.awt.Color.pink);
		}
		return jtaShowText;
	}

	/**/
	private javax.swing.JButton getJbtnRecieve() {
		if (jbtnRecieve == null) {
			jbtnRecieve = new javax.swing.JButton();
			jbtnRecieve.setBounds(34, 291, 85, 22);
			jbtnRecieve.setText("Recieve");
			jbtnRecieve.addActionListener(new recieveAction());
		}
		return jbtnRecieve;
	}

	/**/
	private javax.swing.JProgressBar getJprgbRecieve() {
		if (jprgbRecieve == null) {
			jprgbRecieve = new javax.swing.JProgressBar();
			jprgbRecieve.setBounds(24, 353, 340, 20);
		}
		return jprgbRecieve;
	}

	class Wait implements Serializable {

		Timer timer = new Timer(200, new Action());
		int value = 5;

		public Wait() {
		}

		public void Start() {
			timer.start();
			
		}

		public void Stop() {
			timer.stop();
			jprgbRecieve.setValue(0);
		}

		class Action implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				if (value >= 200)
					value = 3;
				jprgbRecieve.setValue(value);
				value += 1;
			}
		}

	}

	class recieveTreeListener implements TreeSelectionListener, Serializable {
		DefaultMutableTreeNode node;
		int index = -1;
		public void valueChanged(TreeSelectionEvent e) {
			node =
				(DefaultMutableTreeNode) recieveTree
					.getLastSelectedPathComponent();
			for (int i = 0; i < recieveNode.getChildCount(); i++)
				if (node
					== (DefaultMutableTreeNode) recieveNode.getChildAt(i)) {
					index = i;
					break;
				}
			if (index >= 0) {
				textShowFrom.setText("From: "+
					findEmailAddress(
						((MessageDS) (recieveVector.elementAt(index)))
							.getAddress()));
				textShowSubject.setText("Subject: "+
					((MessageDS) (recieveVector.elementAt(index)))
						.getSubject());
				textShowEnclosure.setText("Enclosure: "+
					((MessageDS) (recieveVector.elementAt(index)))
						.getEnclosure());
				textShowDate.setText(
					"Date: "
						+ ((MessageDS) (recieveVector.elementAt(index)))
							.getRecievedDate()
						+ "");
				//  System.out.println(((MyMessage)(recieveVector.elementAt(index))).getAttachment());
				jtaShowText.setText(
					((MessageDS) (recieveVector.elementAt(index)))
						.getContent());
			}
		}
	}

	//TreeSelectionListener for sendTree
	class saveTreeListener implements TreeSelectionListener, Serializable {
		DefaultMutableTreeNode node;
		int index = -1;

		//对接保存的message 的树视图的操作的响应 选定值改变时要完成相应的视图更新
		public void valueChanged(TreeSelectionEvent e) {
			node =
				(DefaultMutableTreeNode) saveTree
					.getLastSelectedPathComponent();
			//用循环完成查找相应选中的object对应的index以便从消息队列数组中
			//找出相应的内容来完成视图的更新
			for (int i = 0; i < saveNode.getChildCount(); i++)
			{
				if (node == (DefaultMutableTreeNode) saveNode.getChildAt(i))
				{
					index = i;
					break;
				}
			}
				
			if (index >= 0) 
			{
				textShowTo.setText(
					"To: "
						+ ((MessageDS) (saveVector.elementAt(index)))
							.getAddress());
				textShowSubject.setText(
					"Subject: "
						+ ((MessageDS) (saveVector.elementAt(index)))
							.getSubject());
				textShowEnclosure.setText(
					"Enclosure: "
						+ ((MessageDS) (saveVector.elementAt(index)))
							.getEnclosure());
				textShowDate.setText(
					"Date: "
						+ ((MessageDS) (saveVector.elementAt(index)))
							.getRecievedDate()
						+ "");
				jtaShowText.setText(
					((MessageDS) (saveVector.elementAt(index))).getContent());
			}

		}
	}

	Wait wait = new Wait();
	class recieveAction implements ActionListener, Serializable {
		public void actionPerformed(ActionEvent e) {
			wait.Start();

			System.out.println(" recieve button down");
			(new recieveThread()).start();

		}
	}
	class recieveThread extends Thread implements Serializable {
		String Server =
			"pop3://"
				+ Configuration.getAccount()
				+ ":"
				+ Configuration.getPassword()
				+ "@"
				+ Configuration.getPOP3()
				+ "/INBOX";

		public void run() {

			URLName ServerUrlName = new URLName(Server);

			System.out.println(ServerUrlName.toString());

			Properties props = new Properties();
			try {
				Session session = Session.getDefaultInstance(props, null);

				Folder folder = session.getFolder(ServerUrlName);

				System.out.println(folder.toString());

				if (folder == null) {
					JOptionPane.showMessageDialog(
						null,
						"Sorry,找不到所要的文件夹:" + Server);
				} else {
					folder.open(Folder.READ_WRITE);
					
					System.out.println("  folder open");

					Message[] messages = folder.getMessages();
					
					System.out.println(messages.length);
					
					if (messages.length == 0) 
					{
						JOptionPane.showMessageDialog(null, "在你的邮箱里没有新的邮件!");
						folder.close(false);
					} 
					else 
					{
						for (int i = 0; i < messages.length; i++) {
							MessageDS messageDS = new MessageDS();
							messageDS.setAddress(
								InternetAddress.toString(
									messages[i].getFrom()));
							messageDS.setSubject(getsubject(messages[i]));
							messageDS.setRecievedDate(
								messages[i].getSentDate());

							messageDS.setIsHtml(false);

							Object body = messages[i].getContent();

							if (body instanceof Multipart) {
								processM.multipartProcess(
									(Multipart) body,
									messageDS,
									recieveVector);
							} else {
								processM.partProcess(
									messages[i],
									messageDS,
									recieveVector);
							}
							recieveVector.addElement(messageDS);

							//接收到的邮件 要添加到收件箱 同时更新视图 
							DefaultMutableTreeNode messageNode =
								new DefaultMutableTreeNode(
									recieveVector.size()
										+ "."
										+ findEmailAddress(
											messageDS.getAddress()));
							//动态增长的 节点字符串 :)

							System.out.println(
								"recieve complete , begin to update treeview");

							recieveModel.insertNodeInto(
								messageNode,
								recieveNode,
								recieveNode.getChildCount());
							System.out.println("step 1");
							//Display Path dynamicly when Node inserting 
							recieveTree.scrollPathToVisible(
								new TreePath(messageNode.getPath()));
							messages[i].setFlag(Flags.Flag.DELETED, false);
							System.out.println("step 2");
						}
						folder.close(true); //Delete messages with this flag
					}

				}
				wait.Stop();

				JOptionPane.showMessageDialog(null, " Mail recieved Ok!");
			} catch (Exception MessageE) {
				wait.Stop();

				JOptionPane.showMessageDialog(
					null,
					"Error:" + MessageE.getMessage());
			}
		} //run end
	} //recieveThread end

	//ISO8859-1 编码标准 
	public String getstr(String str) {
		try {
			String temp_p = str;
			byte[] temp_t = temp_p.getBytes("ISO8859-1");
			String temp = new String(temp_t);
			return temp;
		} catch (Exception e) {
			return str;
		}
	}

	public String getsubject(Message m) throws Exception {
		boolean bgetstr; //Need to be encode to certain ISO or not
		String temps;

		String[] ta1 = m.getHeader("Subject");

		String _subject;

		if (ta1 != null)
			_subject = ta1[0];
		else
			_subject = "";

		if (_subject.indexOf("=?gb2312") != -1
			|| _subject.indexOf("=?GBK") != -1
			|| _subject.indexOf("=?utf-8") != -1)
			bgetstr = false; 
		else
			bgetstr = true;

		try {
			//Decode "subject" or masses
			temps = MimeUtility.decodeText(_subject);
		} catch (UnsupportedEncodingException E) {
			return _subject;
		}

		if (temps.length() == 0) {
			temps = "(无主题)";
			bgetstr = false;
		}
		if (bgetstr == false)
			return temps; // need 
		else
			return getstr(temps); //dosen't need
	}

	//获取邮件来源地址
	public String findEmailAddress(String str) {
		try {
			int foreindex = str.indexOf("<");
			int backindex = str.indexOf(">");
			if (foreindex != -1 && backindex != -1)
				str = str.substring(foreindex + 1, backindex);
			return str;

		} catch (Exception e) {
			return str;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -