www.pudn.com > JavaMailWithGUI.rar > ViewPanel.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; 
		} 
	} 
}