//Modified by zealvampire 2007-4-4
类似foxmail那样,一个不好做的是怎样使本地邮件的拷贝和服务器上的同步,有些邮件没有时间戳,没有message-id,而且有些服务器邮件默认时间排序有些是升有些是降序。或者参考下开源的邮件客户端要好些。
import java.util.Date;
import java.util.Properties;
import javax.mail. * ;
import javax.mail.internet.MimeMessage;
import javax.mail.search. * ;
public class popMail
{
public popMail()
{
protocol = "pop3";
pageCount = 5;
mailNum = 0;
}
public void setUser(String user)
{
this.user = user;
}
public void setPassword(String password)
{
this.password = password;
}
public void setPopDns(String popDns)
{
this.popDns = popDns;
}
public void setAddress(String address)
{
this.address = address;
}
public void setProtocol(String protocol)
{
this.protocol = protocol;
}
public int getMailNum()
{
return mailNum;
}
public void connect()
{
Properties p = new Properties();
p.put("mail.host", popDns);
session = Session.getInstance(p, new MailAuthenticator(user, password));
try
{
store = session.getStore(protocol);
store.connect();
folder = store.getFolder("INBOX");
folder.open(2);
mesg = folder.getMessages();
mailNum = mesg.length;
}
catch(NoSuchProviderException e)
{
e.printStackTrace();
}
catch(MessagingException e1)
{
e1.printStackTrace();
}
}
public Message[] searchByID(String mesgID[])
{
OrTerm orTerm;
MessageIDTerm mesgIDTerm[] = new MessageIDTerm[mesgID.length];
for(int i = 0; i < mesgID.length; i++)
mesgIDTerm[i] = new MessageIDTerm(mesgID[i]);
orTerm = new OrTerm(mesgIDTerm);
if(folder == null)
connect();
Message mesgDone[] = folder.search(orTerm, mesg);
return mesgDone;
Exception e;
e;
e.printStackTrace();
return null;
}
public Message[] searchByFrom(String from[])
{
OrTerm orTerm;
FromStringTerm fromStringTerm[] = new FromStringTerm[from.length];
for(int i = 0; i < from.length; i++)
fromStringTerm[i] = new FromStringTerm(from[i]);
orTerm = new OrTerm(fromStringTerm);
if(folder == null)
connect();
Message mesgDone[] = folder.search(orTerm, mesg);
return mesgDone;
Exception e;
e;
e.printStackTrace();
return null;
}
public Message[] searchByDate(int comparision, Date date, boolean sentDateTermFlag)
{
javax.mail.search.DateTerm dateTerm;
if(sentDateTermFlag)
dateTerm = new SentDateTerm(comparision, date);
else
dateTerm = new ReceivedDateTerm(comparision, date);
if(folder == null)
connect();
Message mesgDone[] = folder.search(dateTerm, mesg);
return mesgDone;
Exception e;
e;
e.printStackTrace();
return null;
}
public String delMails(int index[], mailHeaderData headerData[])
{
if(mesg == null)
connect();
StringBuffer buf = new StringBuffer();
for(int i = 0; i < index.length; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[index[i]], index[i]);
if(mesgWrap.getMesgID().compareTo(headerData[i].getMesgid()) == 0)
buf.append(mesgWrap.delMesg());
else
buf.append("index=").append(index[i]).append("为垃圾邮件.");
}
try
{
closeAll();
}
catch(Exception e)
{
e.printStackTrace();
}
return buf.toString();
}
public String delAllGarbage()
{
StringBuffer buf;
if(mesg == null)
connect();
if(mesg == null)
return "mesg null error";
String tmpId = "";
buf = new StringBuffer();
for(int i = 0; i < mesg.length; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[i], i);
tmpId = mesgWrap.getMesgID();
if(tmpId.startsWith("garbage"))
buf.append(mesgWrap.delMesg());
}
closeAll();
return buf.toString();
Exception e;
e;
e.printStackTrace();
return e.getMessage();
}
public String delAll()
{
if(mesg == null)
connect();
if(mesg == null)
return "ERROR=FOLDER MESSAGE[] NULL";
int count = mesg.length;
StringBuffer buf = new StringBuffer();
for(int i = 0; i < count; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[i], i);
buf.append(mesgWrap.delMesg());
}
try
{
closeAll();
}
catch(Exception e)
{
String str = "del all mails error=" + e;
return str;
}
return buf.toString();
}
public String[][] listMails(int page)
{
String array[][];
if(mesg == null)
connect();
array = new String[pageCount][6];
int tmp = page * pageCount;
for(int i = page * pageCount; i < pageCount * (page + 1) && i < mesg.length; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[i], i);
try
{
array[i - tmp][0] = mesgWrap.getMesgID();
array[i - tmp][1] = mesgWrap.getFrom();
array[i - tmp][2] = mesgWrap.getSentDate();
array[i - tmp][3] = mesgWrap.getSubject();
array[i - tmp][4] = String.valueOf(mesgWrap.getSize());
array[i - tmp][5] = mesgWrap.getIndex();
}
catch(Exception e)
{
e.printStackTrace();
}
}
closeAll();
return array;
Exception ex;
ex;
ex.printStackTrace();
return null;
}
public Object[] getMailContentByIndexId(int index, mailHeaderData headerData, boolean downFlag, String filename, String savePath)
{
Object array[] = new Object[3];
if(mesg == null)
connect();
if(index > mesg.length)
return null;
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[index], index);
if(mesgWrap.getMesgID().compareTo(headerData.getMesgid()) == 0)
{
array[0] = "byIndex";
try
{
mesgWrap.processMailContent(mesgWrap.getMimeMesg(), downFlag, filename, savePath);
if(!downFlag)
{
array[1] = mesgWrap.getContent();
array[2] = mesgWrap.getList();
}
}
catch(Exception e)
{
e.printStackTrace();
array[0] = "error";
}
} else
{
array[0] = "byId";
String tmp[] = {
headerData.getMesgid()
};
Message tmpMesg = searchByID(tmp)[0];
mesgWrap = new MimeMesgWrap((MimeMessage)tmpMesg, -1);
try
{
mesgWrap.processMailContent(mesgWrap.getMimeMesg(), downFlag, filename, savePath);
if(!downFlag)
{
headerData.setFrom(mesgWrap.getFrom());
headerData.setIndex(mesgWrap.getIndex());
headerData.setMesgid(mesgWrap.getMesgID());
headerData.setSentDate(mesgWrap.getSentDate());
headerData.setSize(String.valueOf(mesgWrap.getSize()));
headerData.setSubject(mesgWrap.getSubject());
array[1] = mesgWrap.getContent();
array[2] = mesgWrap.getList();
}
}
catch(Exception ex)
{
ex.printStackTrace();
array[0] = "error";
}
}
try
{
closeAll();
}
catch(Exception e)
{
e.printStackTrace();
}
return array;
}
public void closeAll()
throws Exception
{
mesg = null;
if(folder != null)
{
folder.close(true);
folder = null;
}
if(store != null)
{
store.close();
store = null;
}
if(session != null)
session = null;
}
public static void main(String argv[])
throws Exception
{
popMail m = new popMail();
m.setUser("zealvampire");
m.setPassword("8779255");
m.setPopDns("pop.21cn.com");
m.setProtocol("pop3");
m.listMails(0);
}
private String user;
private String password;
private String popDns;
private String address;
private String protocol;
private Session session;
private Store store;
private Folder folder;
private Message mesg[];
private int pageCount;
private int mailNum;
}
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2005-12-22 14:25:13
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: mailHeaderData.java
package com.zeal.mail;
public class mailHeaderData
{
public mailHeaderData()
{
from = "";
sentDate = "";
subject = "";
size = "";
mesgid = "";
index = "0";
}
public void setFrom(String from)
{
this.from = from;
}
public void setSentDate(String sentDate)
{
this.sentDate = sentDate;
}
public void setSubject(String subject)
{
this.subject = subject;
}
public void setSize(String size)
{
this.size = size;
}
public void setMesgid(String mesgid)
{
this.mesgid = mesgid;
}
public void setIndex(String index)
{
this.index = index;
}
public String getFrom()
{
return from;
}
public String getSentDate()
{
return sentDate;
}
public String getSubject()
{
return subject;
}
public String getSize()
{
return size;
}
public String getMesgid()
{
return mesgid;
}
public int getIndex()
{
int tmp = 0;
tmp = Integer.parseInt(index);
return tmp;
Exception e;
e;
e.printStackTrace();
tmp = 0;
return tmp;
}
private String from;
private String sentDate;
private String subject;
private String size;
private String mesgid;
private String index;
}
--------------------
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2005-12-22 14:25:42
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: MailAuthenticator.java
package com.zeal.mail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MailAuthenticator extends Authenticator
{
public MailAuthenticator()
{
user = "";
password = "";
}
public MailAuthenticator(String user, String password)
{
this.user = user;
this.password = password;
}
public MailAuthenticator(String user)
{
this.user = user;
password = "";
}
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(user, password);
}
private String user;
private String password;
}
-------------------
import java.io. * ;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.mail. * ;
import javax.mail.internet. * ;
class MimeMesgWrap
{
public MimeMesgWrap(MimeMessage mesg, int index)
{
content = new StringBuffer();
this.mesg = mesg;
this.index = index;
}
public MimeMesgWrap(MimeMessage mesg)
{
content = new StringBuffer();
this.mesg = mesg;
}
public MimeMessage getMimeMesg()
{
return mesg;
}
public String getIndex()
{
return String.valueOf(index);
}
public String getFrom()
throws Exception
{
InternetAddress address[] = (InternetAddress[])mesg.getFrom();
fromAddress = address[0].toUnicodeString();
if(fromAddress == null || fromAddress.equals(""))
fromAddress = "NULL";
String tmp = mesg.getHeader("From")[0];
System.out.println("From0=" + tmp + " fromAddress=" + fromAddress);
if(tmp.indexOf("=?") == -1)
fromAddress = new String(tmp.getBytes("8859_1"), "GB2312");
return fromAddress;
}
public String getSubject()
{
try
{
subject = mesg.getSubject();
if(subject == null || subject.equals(""))
subject = "NULL";
String tmp = mesg.getHeader("Subject")[0];
if(tmp.indexOf("=?") == -1)
subject = new String(tmp.getBytes("8859_1"), "GB2312");
}
catch(Exception e)
{
e.printStackTrace();
subject = "NULL";
}
return subject;
}
public String getSentDate()
{
java.util.Date date = mesg.getSentDate();
if(date == null)
return "unknown date";
try
{
SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
sentDate = format.format(date);
}
catch(Exception e)
{
e.printStackTrace();
return "unknown date";
}
return sentDate;
}
public void processMailContent(Part part, boolean downFlag, String filename, String savePath)
throws Exception
{
Object o = part.getContent();
if(o == null)
content.append(o.toString() + ":content null. ");
if(part.isMimeType("text/*"))
{
if(!downFlag)
{
String tmp = o.toString();
String contentType = mesg.getContentType().toLowerCase();
if(contentType.indexOf("charset") == -1)
tmp = new String(tmp.getBytes("8859_1"), "GB2312");
content.append(tmp).append(" ");
}
} else
if(part.isMimeType("multipart/*"))
{
MimeMultipart parts = (MimeMultipart)o;
processMultipart(parts, downFlag, filename, savePath);
} else
if(mesg.isMimeType("message/rfc822"))
processMailContent((Part)o, downFlag, filename, savePath);
else
content.append(o.toString() + ":Unknown mime type. ");
}
public void processMultipart(MimeMultipart parts, boolean downFlag, String filename, String savePath)
{
try
{
int count = parts.getCount();
alist = new ArrayList();
for(int i = 0; i < count; i++)
{
BodyPart bodyPart = parts.getBodyPart(i);
String disposition = bodyPart.getDisposition();
if(disposition == null)
disposition = "";
if(disposition.equals("attachment") || disposition.equals("inline"))
{
String aFileName = bodyPart.getFileName();
if(aFileName == null)
aFileName = "";
if(aFileName.toUpperCase().indexOf("?=") == -1)
aFileName = new String(aFileName.getBytes("8859_1"), "GB2312");
else
aFileName = MimeUtility.decodeText(aFileName);
System.out.println("aFileName2=" + aFileName);
alist.add(aFileName);
if(!downFlag || filename.compareTo(aFileName) != 0)
continue;
try
{
InputStream is = bodyPart.getInputStream();
String leg = String.valueOf(is.available());
System.err.println(aFileName + "附件长度是:" + leg);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
byte buff[] = new byte[512];
bis = new BufferedInputStream(is);
System.out.println("savePath=" + savePath);
FileOutputStream fos = new FileOutputStream(savePath + aFileName);
bos = new BufferedOutputStream(fos);
int j;
while((j = bis.read(buff, 0, buff.length)) != -1)
{
bos.write(buff, 0, j);
bos.flush();
}
fos.close();
bis.close();
bos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
break;
}
Object tmp = bodyPart.getContent();
System.out.println("type=" + bodyPart.getContentType());
if(tmp != null)
if(bodyPart.isMimeType("multipart/*"))
processMultipart((MimeMultipart)tmp, downFlag, filename, savePath);
else
if(!downFlag)
content.append(tmp.toString()).append(" ");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public String delMesg()
{
String str;
try
{
mesg.setFlag(javax.mail.Flags.Flag.DELETED, true);
}
catch(Exception e)
{
e.printStackTrace();
str = "set del flag error,index=" + index + " ";
return str;
}
str = "del flag success,index=" + index + " ";
return str;
}
public ArrayList getList()
{
return alist;
}
public int getSize()
{
try
{
size = mesg.getSize();
}
catch(Exception e)
{
e.printStackTrace();
size = 0;
}
return size;
}
public String getContent()
{
return content.toString();
}
public String getMesgID()
{
StringBuffer buf = new StringBuffer();
String id = mesg.getMessageID();
if(id == null)
buf.append("garbage-mail<").append(getEmailAddress()).append(">");
else
buf.append(id);
return buf.toString();
Exception e;
e;
e.printStackTrace();
buf.append("garbage-mail<").append(getEmailAddress()).append(">");
return buf.toString();
Exception ex;
ex;
ex.printStackTrace();
return "error";
}
public String getEmailAddress()
throws Exception
{
String str = "";
InternetAddress address[] = (InternetAddress[])mesg.getFrom();
str = address[0].getAddress();
return str;
}
private MimeMessage mesg;
private int index;
private String subject;
private StringBuffer content;
private String fromAddress;
private String sentDate;
private ArrayList alist;
private int size;
}
类似foxmail那样,一个不好做的是怎样使本地邮件的拷贝和服务器上的同步,有些邮件没有时间戳,没有message-id,而且有些服务器邮件默认时间排序有些是升有些是降序。或者参考下开源的邮件客户端要好些。
import java.util.Date;
import java.util.Properties;
import javax.mail. * ;
import javax.mail.internet.MimeMessage;
import javax.mail.search. * ;
public class popMail
{
public popMail()
{
protocol = "pop3";
pageCount = 5;
mailNum = 0;
}
public void setUser(String user)
{
this.user = user;
}
public void setPassword(String password)
{
this.password = password;
}
public void setPopDns(String popDns)
{
this.popDns = popDns;
}
public void setAddress(String address)
{
this.address = address;
}
public void setProtocol(String protocol)
{
this.protocol = protocol;
}
public int getMailNum()
{
return mailNum;
}
public void connect()
{
Properties p = new Properties();
p.put("mail.host", popDns);
session = Session.getInstance(p, new MailAuthenticator(user, password));
try
{
store = session.getStore(protocol);
store.connect();
folder = store.getFolder("INBOX");
folder.open(2);
mesg = folder.getMessages();
mailNum = mesg.length;
}
catch(NoSuchProviderException e)
{
e.printStackTrace();
}
catch(MessagingException e1)
{
e1.printStackTrace();
}
}
public Message[] searchByID(String mesgID[])
{
OrTerm orTerm;
MessageIDTerm mesgIDTerm[] = new MessageIDTerm[mesgID.length];
for(int i = 0; i < mesgID.length; i++)
mesgIDTerm[i] = new MessageIDTerm(mesgID[i]);
orTerm = new OrTerm(mesgIDTerm);
if(folder == null)
connect();
Message mesgDone[] = folder.search(orTerm, mesg);
return mesgDone;
Exception e;
e;
e.printStackTrace();
return null;
}
public Message[] searchByFrom(String from[])
{
OrTerm orTerm;
FromStringTerm fromStringTerm[] = new FromStringTerm[from.length];
for(int i = 0; i < from.length; i++)
fromStringTerm[i] = new FromStringTerm(from[i]);
orTerm = new OrTerm(fromStringTerm);
if(folder == null)
connect();
Message mesgDone[] = folder.search(orTerm, mesg);
return mesgDone;
Exception e;
e;
e.printStackTrace();
return null;
}
public Message[] searchByDate(int comparision, Date date, boolean sentDateTermFlag)
{
javax.mail.search.DateTerm dateTerm;
if(sentDateTermFlag)
dateTerm = new SentDateTerm(comparision, date);
else
dateTerm = new ReceivedDateTerm(comparision, date);
if(folder == null)
connect();
Message mesgDone[] = folder.search(dateTerm, mesg);
return mesgDone;
Exception e;
e;
e.printStackTrace();
return null;
}
public String delMails(int index[], mailHeaderData headerData[])
{
if(mesg == null)
connect();
StringBuffer buf = new StringBuffer();
for(int i = 0; i < index.length; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[index[i]], index[i]);
if(mesgWrap.getMesgID().compareTo(headerData[i].getMesgid()) == 0)
buf.append(mesgWrap.delMesg());
else
buf.append("index=").append(index[i]).append("为垃圾邮件.");
}
try
{
closeAll();
}
catch(Exception e)
{
e.printStackTrace();
}
return buf.toString();
}
public String delAllGarbage()
{
StringBuffer buf;
if(mesg == null)
connect();
if(mesg == null)
return "mesg null error";
String tmpId = "";
buf = new StringBuffer();
for(int i = 0; i < mesg.length; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[i], i);
tmpId = mesgWrap.getMesgID();
if(tmpId.startsWith("garbage"))
buf.append(mesgWrap.delMesg());
}
closeAll();
return buf.toString();
Exception e;
e;
e.printStackTrace();
return e.getMessage();
}
public String delAll()
{
if(mesg == null)
connect();
if(mesg == null)
return "ERROR=FOLDER MESSAGE[] NULL";
int count = mesg.length;
StringBuffer buf = new StringBuffer();
for(int i = 0; i < count; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[i], i);
buf.append(mesgWrap.delMesg());
}
try
{
closeAll();
}
catch(Exception e)
{
String str = "del all mails error=" + e;
return str;
}
return buf.toString();
}
public String[][] listMails(int page)
{
String array[][];
if(mesg == null)
connect();
array = new String[pageCount][6];
int tmp = page * pageCount;
for(int i = page * pageCount; i < pageCount * (page + 1) && i < mesg.length; i++)
{
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[i], i);
try
{
array[i - tmp][0] = mesgWrap.getMesgID();
array[i - tmp][1] = mesgWrap.getFrom();
array[i - tmp][2] = mesgWrap.getSentDate();
array[i - tmp][3] = mesgWrap.getSubject();
array[i - tmp][4] = String.valueOf(mesgWrap.getSize());
array[i - tmp][5] = mesgWrap.getIndex();
}
catch(Exception e)
{
e.printStackTrace();
}
}
closeAll();
return array;
Exception ex;
ex;
ex.printStackTrace();
return null;
}
public Object[] getMailContentByIndexId(int index, mailHeaderData headerData, boolean downFlag, String filename, String savePath)
{
Object array[] = new Object[3];
if(mesg == null)
connect();
if(index > mesg.length)
return null;
MimeMesgWrap mesgWrap = new MimeMesgWrap((MimeMessage)mesg[index], index);
if(mesgWrap.getMesgID().compareTo(headerData.getMesgid()) == 0)
{
array[0] = "byIndex";
try
{
mesgWrap.processMailContent(mesgWrap.getMimeMesg(), downFlag, filename, savePath);
if(!downFlag)
{
array[1] = mesgWrap.getContent();
array[2] = mesgWrap.getList();
}
}
catch(Exception e)
{
e.printStackTrace();
array[0] = "error";
}
} else
{
array[0] = "byId";
String tmp[] = {
headerData.getMesgid()
};
Message tmpMesg = searchByID(tmp)[0];
mesgWrap = new MimeMesgWrap((MimeMessage)tmpMesg, -1);
try
{
mesgWrap.processMailContent(mesgWrap.getMimeMesg(), downFlag, filename, savePath);
if(!downFlag)
{
headerData.setFrom(mesgWrap.getFrom());
headerData.setIndex(mesgWrap.getIndex());
headerData.setMesgid(mesgWrap.getMesgID());
headerData.setSentDate(mesgWrap.getSentDate());
headerData.setSize(String.valueOf(mesgWrap.getSize()));
headerData.setSubject(mesgWrap.getSubject());
array[1] = mesgWrap.getContent();
array[2] = mesgWrap.getList();
}
}
catch(Exception ex)
{
ex.printStackTrace();
array[0] = "error";
}
}
try
{
closeAll();
}
catch(Exception e)
{
e.printStackTrace();
}
return array;
}
public void closeAll()
throws Exception
{
mesg = null;
if(folder != null)
{
folder.close(true);
folder = null;
}
if(store != null)
{
store.close();
store = null;
}
if(session != null)
session = null;
}
public static void main(String argv[])
throws Exception
{
popMail m = new popMail();
m.setUser("zealvampire");
m.setPassword("8779255");
m.setPopDns("pop.21cn.com");
m.setProtocol("pop3");
m.listMails(0);
}
private String user;
private String password;
private String popDns;
private String address;
private String protocol;
private Session session;
private Store store;
private Folder folder;
private Message mesg[];
private int pageCount;
private int mailNum;
}
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2005-12-22 14:25:13
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: mailHeaderData.java
package com.zeal.mail;
public class mailHeaderData
{
public mailHeaderData()
{
from = "";
sentDate = "";
subject = "";
size = "";
mesgid = "";
index = "0";
}
public void setFrom(String from)
{
this.from = from;
}
public void setSentDate(String sentDate)
{
this.sentDate = sentDate;
}
public void setSubject(String subject)
{
this.subject = subject;
}
public void setSize(String size)
{
this.size = size;
}
public void setMesgid(String mesgid)
{
this.mesgid = mesgid;
}
public void setIndex(String index)
{
this.index = index;
}
public String getFrom()
{
return from;
}
public String getSentDate()
{
return sentDate;
}
public String getSubject()
{
return subject;
}
public String getSize()
{
return size;
}
public String getMesgid()
{
return mesgid;
}
public int getIndex()
{
int tmp = 0;
tmp = Integer.parseInt(index);
return tmp;
Exception e;
e;
e.printStackTrace();
tmp = 0;
return tmp;
}
private String from;
private String sentDate;
private String subject;
private String size;
private String mesgid;
private String index;
}
--------------------
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2005-12-22 14:25:42
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: MailAuthenticator.java
package com.zeal.mail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MailAuthenticator extends Authenticator
{
public MailAuthenticator()
{
user = "";
password = "";
}
public MailAuthenticator(String user, String password)
{
this.user = user;
this.password = password;
}
public MailAuthenticator(String user)
{
this.user = user;
password = "";
}
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(user, password);
}
private String user;
private String password;
}
-------------------
import java.io. * ;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.mail. * ;
import javax.mail.internet. * ;
class MimeMesgWrap
{
public MimeMesgWrap(MimeMessage mesg, int index)
{
content = new StringBuffer();
this.mesg = mesg;
this.index = index;
}
public MimeMesgWrap(MimeMessage mesg)
{
content = new StringBuffer();
this.mesg = mesg;
}
public MimeMessage getMimeMesg()
{
return mesg;
}
public String getIndex()
{
return String.valueOf(index);
}
public String getFrom()
throws Exception
{
InternetAddress address[] = (InternetAddress[])mesg.getFrom();
fromAddress = address[0].toUnicodeString();
if(fromAddress == null || fromAddress.equals(""))
fromAddress = "NULL";
String tmp = mesg.getHeader("From")[0];
System.out.println("From0=" + tmp + " fromAddress=" + fromAddress);
if(tmp.indexOf("=?") == -1)
fromAddress = new String(tmp.getBytes("8859_1"), "GB2312");
return fromAddress;
}
public String getSubject()
{
try
{
subject = mesg.getSubject();
if(subject == null || subject.equals(""))
subject = "NULL";
String tmp = mesg.getHeader("Subject")[0];
if(tmp.indexOf("=?") == -1)
subject = new String(tmp.getBytes("8859_1"), "GB2312");
}
catch(Exception e)
{
e.printStackTrace();
subject = "NULL";
}
return subject;
}
public String getSentDate()
{
java.util.Date date = mesg.getSentDate();
if(date == null)
return "unknown date";
try
{
SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
sentDate = format.format(date);
}
catch(Exception e)
{
e.printStackTrace();
return "unknown date";
}
return sentDate;
}
public void processMailContent(Part part, boolean downFlag, String filename, String savePath)
throws Exception
{
Object o = part.getContent();
if(o == null)
content.append(o.toString() + ":content null. ");
if(part.isMimeType("text/*"))
{
if(!downFlag)
{
String tmp = o.toString();
String contentType = mesg.getContentType().toLowerCase();
if(contentType.indexOf("charset") == -1)
tmp = new String(tmp.getBytes("8859_1"), "GB2312");
content.append(tmp).append(" ");
}
} else
if(part.isMimeType("multipart/*"))
{
MimeMultipart parts = (MimeMultipart)o;
processMultipart(parts, downFlag, filename, savePath);
} else
if(mesg.isMimeType("message/rfc822"))
processMailContent((Part)o, downFlag, filename, savePath);
else
content.append(o.toString() + ":Unknown mime type. ");
}
public void processMultipart(MimeMultipart parts, boolean downFlag, String filename, String savePath)
{
try
{
int count = parts.getCount();
alist = new ArrayList();
for(int i = 0; i < count; i++)
{
BodyPart bodyPart = parts.getBodyPart(i);
String disposition = bodyPart.getDisposition();
if(disposition == null)
disposition = "";
if(disposition.equals("attachment") || disposition.equals("inline"))
{
String aFileName = bodyPart.getFileName();
if(aFileName == null)
aFileName = "";
if(aFileName.toUpperCase().indexOf("?=") == -1)
aFileName = new String(aFileName.getBytes("8859_1"), "GB2312");
else
aFileName = MimeUtility.decodeText(aFileName);
System.out.println("aFileName2=" + aFileName);
alist.add(aFileName);
if(!downFlag || filename.compareTo(aFileName) != 0)
continue;
try
{
InputStream is = bodyPart.getInputStream();
String leg = String.valueOf(is.available());
System.err.println(aFileName + "附件长度是:" + leg);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
byte buff[] = new byte[512];
bis = new BufferedInputStream(is);
System.out.println("savePath=" + savePath);
FileOutputStream fos = new FileOutputStream(savePath + aFileName);
bos = new BufferedOutputStream(fos);
int j;
while((j = bis.read(buff, 0, buff.length)) != -1)
{
bos.write(buff, 0, j);
bos.flush();
}
fos.close();
bis.close();
bos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
break;
}
Object tmp = bodyPart.getContent();
System.out.println("type=" + bodyPart.getContentType());
if(tmp != null)
if(bodyPart.isMimeType("multipart/*"))
processMultipart((MimeMultipart)tmp, downFlag, filename, savePath);
else
if(!downFlag)
content.append(tmp.toString()).append(" ");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public String delMesg()
{
String str;
try
{
mesg.setFlag(javax.mail.Flags.Flag.DELETED, true);
}
catch(Exception e)
{
e.printStackTrace();
str = "set del flag error,index=" + index + " ";
return str;
}
str = "del flag success,index=" + index + " ";
return str;
}
public ArrayList getList()
{
return alist;
}
public int getSize()
{
try
{
size = mesg.getSize();
}
catch(Exception e)
{
e.printStackTrace();
size = 0;
}
return size;
}
public String getContent()
{
return content.toString();
}
public String getMesgID()
{
StringBuffer buf = new StringBuffer();
String id = mesg.getMessageID();
if(id == null)
buf.append("garbage-mail<").append(getEmailAddress()).append(">");
else
buf.append(id);
return buf.toString();
Exception e;
e;
e.printStackTrace();
buf.append("garbage-mail<").append(getEmailAddress()).append(">");
return buf.toString();
Exception ex;
ex;
ex.printStackTrace();
return "error";
}
public String getEmailAddress()
throws Exception
{
String str = "";
InternetAddress address[] = (InternetAddress[])mesg.getFrom();
str = address[0].getAddress();
return str;
}
private MimeMessage mesg;
private int index;
private String subject;
private StringBuffer content;
private String fromAddress;
private String sentDate;
private ArrayList alist;
private int size;
}