package com.email;
import javax.mail.*;
import javax.mail.internet.*;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JLabel;
import javax.swing.JList;
import java.util.*;
import java.awt.BorderLayout;
import javax.swing.JProgressBar;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.SoftBevelBorder;
import java.awt.event.*;
/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
/**
* <p>Title: 使用JavaMail接收邮件</p>
* <p>Description: 实例JavaMail包接收邮件,本实例没有实现接收邮件的附件。</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Filename: POPMail.java</p>
* @version 1.0
*/
public class POPMail extends javax.swing.JDialog implements WindowListener {
/**
*<br>方法说明:主方法,接收用户输入的邮箱服务器、用户名和密码
*<br>输入参数:
*<br>返回类型:
*/
String server,user,pass,mailfrom;
PropertyFileOperation op;
private JLabel jLabel;
private JList jList;
private JProgressBar jProgressBar;
private int sum,mailNum;
private Vector v=new Vector();
POPMail inst;
public void windowOpened(WindowEvent windowEvent) {
TMail doIt = new TMail();
doIt.start();
}
public class TMail extends Thread {
public void run(){
getMail();
}
}
public void windowClosed(WindowEvent windowEvent) { }
public void windowIconified(WindowEvent windowEvent) { }
public void windowDeiconified(WindowEvent windowEvent) { }
public void windowActivated(WindowEvent windowEvent) { }
public void windowDeactivated(WindowEvent windowEvent) { }
public void windowClosing(WindowEvent windowEvent) {
System.exit(0);
}
// private void center() {
// Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
// setLocation( ( ( screenDim.width - getSize().width ) / 2 ),
// ( ( screenDim.height - getSize().height ) / 2) );
// }
/**
* Auto-generated main method to display this JDialog
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
POPMail inst = new POPMail();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
//getMail();
}
public POPMail(int init)
{
inst = new POPMail();
inst.setLocationRelativeTo(null);
inst.setModal(true);
inst.setResizable(false);
inst.setVisible(true);
inst.pack();
//Thread.currentThread().sleep(2000);
}
public POPMail() {
super();
this.addWindowListener(this);
initGUI();
///getMail();
}
public void getMail()
{
///////////////
op=new PropertyFileOperation("MailServer.properties");//读取邮箱配置
v.addElement("加载邮箱配置");
this.jList.setListData(v);
////////////////重邮箱更新粮库服务器信息/////////////////////////////////////////////////////
int num=Integer.parseInt(op.getVal("num"));
server=op.getVal("server");
user=op.getVal("user");
pass=op.getVal("pass");
mailNum=num;
mailfrom=op.getVal("from");
//System.out.println(num);
v.addElement("加载服务器配置");
this.jList.setListData(v);
op=new PropertyFileOperation("GrainStoreServer.properties");
v.addElement("更新服务器信息");
this.jList.setListData(v);
receive(server, user, pass);
}
private void initGUI() {
try {
{
jProgressBar = new JProgressBar();
getContentPane().add(jProgressBar, BorderLayout.SOUTH);
this.jProgressBar.setMaximum(100);
this.jProgressBar.setMinimum(0);
}
{
jLabel = new JLabel();
getContentPane().add(jLabel, BorderLayout.NORTH);
jLabel.setText("\u670d\u52a1\u5668\u4fe1\u606f\u66f4\u65b0\u4e2d\uff0c\u8bf7\u7a0d\u540e...");
jLabel.setPreferredSize(new java.awt.Dimension(392, 36));
}
{
ListModel jListModel =
new DefaultComboBoxModel(
new String[] { "" });
jList = new JList();
getContentPane().add(jList, BorderLayout.CENTER);
jList.setModel(jListModel);
jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jList.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
}
this.setSize(400, 263);
} catch (Exception e) {
//e.printStackTrace();
v.addElement("错误信息:"+e.getMessage());
this.jList.setListData(v);
}
}
/*public POPMail(String popserver,String popuser,String poppass,int num,String popfrom)
{
//SwingUtilities.invokeLater(new Runnable() {
//public void run() {
//POPMail inst = new POPMail();
//inst.setModal(true);
//inst.setVisible(true);
//}
//});
POPMail inst = new POPMail();
//inst.setModal(true);
inst.setVisible(true);
initGUI();
op=new PropertyFileOperation("GrainStoreServer.properties");
server=popserver;
user=popuser;
pass=poppass;
mailNum=num;
mailfrom=popfrom;
receive(popserver, popuser, poppass);
inst.pack();
}*/
/**
*<br>方法说明:接收邮件信息
*<br>输入参数:
*<br>返回类型:
*/
public void receive(String popServer, String popUser, String popPassword){
Store store=null;
Folder folder=null;
try{
//获取默认会话
Properties props = System.getProperties();
Session session = Session.getDefaultInstance(props, null);
//使用POP3会话机制,连接服务器
store = session.getStore("pop3");
store.connect(popServer, -1,popUser,popPassword);
//store.connect(popServer, popUser, popPassword);
//获取默认文件夹
folder = store.getDefaultFolder();
if (folder == null) throw new Exception("无默认文件夹");
//如果是收件箱
folder = folder.getFolder("INBOX");
if (folder == null) throw new Exception("无服务器信息");
//使用只读方式打开收件箱
folder.open(Folder.READ_ONLY);
//得到文件夹信息,获取邮件列表
Message[] msgs = folder.getMessages();
int mailCount=msgs.length;
int msgNum=0;
for (msgNum = 0; msgNum < mailCount; msgNum++){
//if(msgNum==mailNum)//如果检索的结果等于服务器的数目,跳出循环
// break;
int percent =(int)((msgNum+1)*100/mailCount);
//System.out.println(percent);
//this.jTextField.setText(Integer.toString(percent));
//this.jTextField.repaint();
//this.jTextField.validate();
this.jProgressBar.setValue(percent);
this.setTitle("服务器列表更新:"+Integer.toString(percent)+"%");
jProgressBar.repaint();
jProgressBar.validate();
//frame.setVisible(true);
//Thread.sleep(500);
saveMsg(msgs[msgNum]);
}
//Dimension screensize=Toolkit.getDefaultToolkit().getScreenSize();
//this.getParent().setLocation(0, 0);
//this.getParent().setSize(screensize.width,screensize.height-20);
}catch (Exception ex){
//ex.printStackTrace();
v.addElement("错误信息:"+ex.getMessage());
this.jList.setListData(v);
}
finally{
//释放资源
try{
if (folder!=null) folder.close(false);
if (store!=null) store.close();
}catch (Exception ex2) {
// ex2.printStackTrace();
v.addElement("错误信息:"+ex2.getMessage());
this.jList.setListData(v);
}
finally
{
this.dispose();
inst=null;
}
}
}
/**
*<br>方法说明:打印邮件信息
*<br>输入参数:Message message 信息对象
*<br>返回类型:
*/
public void saveMsg(Message message){
try{
//获得发送邮件地址
String from=((InternetAddress)message.getFrom()[0]).getPersonal();
if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress();
// System.out.println("FROM: "+from);
if(from.equals(mailfrom) || mailfrom.equals(""))
{
//获取主题
String subject=message.getSubject();
//System.out.println("SUBJECT: "+subject);
String[] str = subject.split("\\|");
if(str.length==3)
{
v.addElement("更新服务器"+str[0]+"配置");
this.jList.setListData(v);
op.setProperties("server"+str[0], str[1]);
op.setProperties("port"+str[0], str[2]);
// op.setProperties("flag"+str[0], "1");
// sum+=1;
// System.out.println("server"+str[0]+":"+str[1]);
// System.out.println("port"+str[0]+":"+str[2]);
// System.out.println(subject);
}
}
//获取信息对象
// Part messagePart=message;
//Object content=messagePart.getContent();
//附件
//if (content instanceof Multipart){
// messagePart=((Multipart)content).getBodyPart(0);
// System.out.println("[ Multipart Message ]");
// }
//获取content类型
//String contentType=messagePart.getContentType();
//如果邮件内容是纯文本或者是HTML,那么打印出信息
//System.out.println("CONTENT:"+contentType);
// if (contentType.startsWith("text/plain")||
//contentType.startsWith("text/html")){
// InputStream is = messagePart.getInputStream();
// BufferedReader reader=new BufferedReader(new InputStreamReader(is));
// String thisLine=reader.readLine();
// while (thisLine!=null){
//System.out.println(thisLine);
//thisLine=reader.readLine();
// }
//}
//System.out.println("-------------- END ---------------");
}catch (Exception ex){
//ex.printStackTrace();
v.addElement("错误信息:"+ex.getMessage());
this.jList.setListData(v);
}
}
}
package com.email;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import java.io.*;
import javax.swing.JOptionPane;
public class PropertyFileOperation {
private File file;
private String filename;
private Properties p = new Properties();
public PropertyFileOperation(String fileName)
{
file = new File (System.getProperty("user.dir")+"\\INF\\"+fileName);
filename=System.getProperty("user.dir")+"\\INF\\"+fileName;
getProperties();
}
public void getProperties(){
//ClassLoader cl = this.getClass().getClassLoader();
FileInputStream input;
// if(cl!=null)
//input=cl.getResourceAsStream(filename);
if(!file.exists())
{
//System.out.println(filename);
JOptionPane.showMessageDialog(null, "配置文件不存在","提示", JOptionPane.ERROR_MESSAGE);
return;
}
try
{
input = new FileInputStream(filename);
p.load(input);
}
catch(IOException e)
{
JOptionPane.showMessageDialog(null, "配置文件加载错误","提示", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
//else
//input=ClassLoader.getSystemResourceAsStream(filename);
}
public void setProperties(String field,String val) {
p.setProperty(field,val);
try {
OutputStream fos = new FileOutputStream(file);
p.store(fos, filename);
fos.close();
} catch (FileNotFoundException ex) {
//System.out.println("file is NULL !!!");
ex.printStackTrace();
} catch (IOException ex) {
// System.out.println("IO is Error !!!");
ex.printStackTrace();
}
}
public String getVal(String field)
{
return p.getProperty(field);
}
}
附:配置文件
GrainStoreServer.properties
#C:\Documents and Settings\admin\workspace\JExplorer\INF\GrainStoreServer.properties
#Thu Sep 20 14:11:31 CST 2007
server04=cn.msn.com
server03=cn.yahoo.com.cn
port04=80
server02=www.sina.com
port03=80
server01=www.baidu.com
port02=80
port01=80
MailServer.properties
#C:\Documents and Settings\admin\workspace\JExplorer\INF\MailServer.properties
#Tue Sep 18 17:09:10 CST 2007
port=110
server=pop3.163.com
[email protected]
num=50
from=
pass=pass
Tree.properties
server1=[01]±±¾©
server2=[02]ÇàÔÆ
server3=[03]²ýƽ
server4=[04]Î÷³Ç