📄 emailmanage.java
字号:
package net.meybo.mail.client;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import net.meybo.mail.ActiveUser;
import net.meybo.mail.Config;
import net.meybo.util.CommUtil;
import net.meybo.util.XMLTool;
import org.apache.log4j.Logger;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import org.dom4j.*;
import com.easyjf.web.tools.*;
/**
* 邮件处理实用方法封装类
* <p>Title: </p>
* <p>Description: 主要对从邮件服务器上收到的邮件进行处理</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: 脉博软件</p>
* @author 蔡世友
* @version 1.0
*/
public abstract class EmailManage {
static final String keyFile = Config.getMailPath() + "\\key.txt";
private static final Logger logger = (Logger) Logger.getLogger(EmailManage.class.getName());
private static final String systemBox="newbox,新邮箱;inbox,收件箱;files,共享文件夹;delbox,垃圾箱;sendbox,发件箱;draftbox,草稿箱";
private static final SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm");
private static final DecimalFormat cf=new DecimalFormat(".00");
private static final Map boxes=new HashMap();
public static void init()
{
String[] s=systemBox.split(";");
if(s!=null)
{
for(int i=0;i<s.length;i++)
{
String[] t=s[i].split(",");
if(t!=null && t.length>1)
{
boxes.put(t[0],t[1]);
}
}
}
}
public static String caculateByte(float size)
{
float si=size/1024f;
String sizeInfo="";
if(si/1024>1)
{
sizeInfo=cf.format(si/1024f)+"MB";
}
else sizeInfo=cf.format(si)+"KB";
return sizeInfo;
}
public static Map countMail(String mailDirPath)
{
Map box=new HashMap();
long size=0l;
int num=0;
File f=new File(mailDirPath);
if(f.exists())
{
File[] files=f.listFiles();
if(files!=null)
{
for(int i=0;i<files.length;i++)
{
size+=files[i].length();
num++;
}
}
}
box.put("diskSize",new Long(size));
box.put("num",new Integer(num));
box.put("newNum",new Integer(0));
box.put("sizeInfo",caculateByte(size));
return box;
}
public static List getMailBoxInfo(String userName,String domain)
{
List list=new ArrayList();
String mailPath=Config.getMailPath()+"/"+domain+"/"+userName;
Map box=countMail(mailPath+"/newbox");
box.put("name","新邮件");
box.put("id","newbox");
list.add(box);
box.put("newNum",box.get("num"));
int newNum=((Integer)box.get("newNum")).intValue();
long diskSize=((Long)box.get("diskSize")).longValue();
box=countMail(mailPath+"/inbox");
box.put("name","收件箱");
box.put("id","inbox");
box.put("newNum",new Integer(newNum));
box.put("num",new Integer(((Integer)box.get("num")).intValue()+newNum));
box.put("diskSize",new Long(((Long)box.get("diskSize")).longValue()+diskSize));
box.put("sizeInfo",caculateByte(((Long)box.get("diskSize")).longValue()));
list.add(box);
box=countMail(mailPath+"/draftbox");
box.put("name","草稿箱");
box.put("id","draftbox");
list.add(box);
box=countMail(mailPath+"/sendbox");
box.put("name","发件箱");
box.put("id","sendbox");
list.add(box);
box=countMail(mailPath+"/delbox");
box.put("name","垃圾箱");
box.put("id","delbox");
list.add(box);
File[] dirs=new File(mailPath).listFiles();
if(dirs!=null){
for(int i=0;i<dirs.length;i++)
{
if(systemBox.indexOf(dirs[i].getName())<0 && dirs[i].isDirectory()){
box=countMail(mailPath+"/"+dirs[i].getName());
box.put("name",dirs[i].getName());
box.put("id",dirs[i].getName());
list.add(box);}
}
}
return list;
}
public static List getMailDir(String userName,String domain)
{
List list=new ArrayList();
String mailPath=Config.getMailPath()+"/"+domain+"/"+userName;
Map box=new HashMap();
box.put("name","收件箱");
box.put("id","inbox");
list.add(box);
box=new HashMap();
box.put("name","草稿箱");
box.put("id","draftbox");
list.add(box);
box=new HashMap();
box.put("name","发件箱");
box.put("id","sendbox");
list.add(box);
box=new HashMap();
box.put("name","垃圾箱");
box.put("id","delbox");
list.add(box);
File[] dirs=new File(mailPath).listFiles();
if(dirs!=null){
for(int i=0;i<dirs.length;i++)
{
if(systemBox.indexOf(dirs[i].getName())<0 && dirs[i].isDirectory()){
box=new HashMap();
box.put("name",dirs[i].getName());
box.put("id",dirs[i].getName());
list.add(box);}
}
}
return list;
}
public static List getMyDir(String userName,String domain)
{
List list=new ArrayList();
String mailPath=Config.getMailPath()+"/"+domain+"/"+userName;
Map box=new HashMap();
File[] dirs=new File(mailPath).listFiles();
if(dirs!=null){
for(int i=0;i<dirs.length;i++)
{
if(systemBox.indexOf(dirs[i].getName())<0 && dirs[i].isDirectory()){
box=new HashMap();
box.put("name",dirs[i].getName());
box.put("id",dirs[i].getName());
list.add(box);}
}
}
return list;
}
public static List getMailList(String userName,String domain,String boxName)
{
List list=new ArrayList();
String mailPath=Config.getMailPath()+"/"+domain+"/"+userName+"/"+boxName;
long size=0l;
int num=0;
File f=new File(mailPath);
File[] files=f.listFiles();
if(files!=null)
{
Session mailsession = Session.getInstance(System.getProperties(),null);
for(int i=0;i<files.length;i++)
{
FileInputStream in=null;
try{
in=new FileInputStream(files[i]);
//System.out.println(in.available());
MimeMessage mail=new MimeMessage(mailsession,in);
ParseMimeMessage m=new ParseMimeMessage(mail);
if(mail!=null)
{
Map email=new HashMap();
email.put("id",files[i].getName());
//Multipart body=null;
m.getMailContent();
if(m.isContainAttach())email.put("attachement","true");
email.put("title",m.getSubject());
email.put("vdate",m.getSentDate());
email.put("mailSize",caculateByte(mail.getSize()));
email.put("sender",m.getFrom());
list.add(email);
}
in.close();
}
catch(Exception e)
{
System.out.println("邮件列表错误!"+e);
try{
if(in!=null)in.close();
}
catch(Exception e1)
{
// System.out.println(e1);
}
}
}
}
return list;
}
public static int delMail(String userName,String domain,List mails)
{
int ret=0;
String basePath=Config.getMailPath()+"/"+domain+"/"+userName+"/";
Iterator it=mails.iterator();
while(it.hasNext())
{
String path=basePath+(String)it.next();
System.out.println(path);
File file=new File(path);
if(file.delete())
ret++;
}
return ret;
}
public static int moveMail(String userName,String domain,String newBox,List mails)
{
int ret=0;
String basePath=Config.getMailPath()+"/"+domain+"/"+userName+"/";
Iterator it=mails.iterator();
while(it.hasNext())
{
String fileName=(String)it.next();
String newName=fileName.substring(fileName.lastIndexOf("/"));
String path=basePath+fileName;
File file=new File(path);
if(file.renameTo(new File(basePath+newBox+"/"+newName)))
ret++;
}
return ret;
}
public static MimeMessage getMail(String userName,String domain,String box,String cid)
{
MimeMessage mail=null;
Session mailsession = Session.getInstance(System.getProperties(),null);
try{
String filePath=Config.getMailPath()+"/"+domain+"/"+userName+"/"+box+"/"+cid;
if(box.equals("inbox"))if(! new File(filePath).exists())
{
File file=new File(Config.getMailPath()+"/"+domain+"/"+userName+"/newbox/"+cid);
if(file.exists())file.renameTo(new File(filePath));
}
InputStream in=new FileInputStream(filePath);
mail=new MimeMessage(mailsession,in);
in.close();
}
catch(Exception e)
{
System.out.println("读取邮件错误!"+e);
}
return mail;
}
public static String getMailContent(MimeMessage mail)
{
String content="";
try{
Multipart body=(Multipart)mail.getContent();
content=getContent(body);
}
catch(Exception e)
{
System.out.println("内容错误!"+e);
}
return content;
}
private static String getContent(Multipart part) throws Exception
{
String content="";
System.out.println(part.getCount());
for(int j=0;j<part.getCount();j++)
{
String disposition=part.getBodyPart(j).getDisposition();
Object obj=part.getBodyPart(j).getContent();
System.out.println(part.getBodyPart(j).getContent().getClass()+disposition);
if(obj.getClass()==String.class)
{content=(String)obj;
}
else if(obj.getClass()==MimeMultipart.class)
{
content=getContent((Multipart)obj);
}
//if(disposition==null)content=(String)body.getBodyPart(j).getContent();
//if(disposition!=null && ((disposition.equals(Part.ATTACHMENT)||(disposition.equals(Part.INLINE)))))email.put("attachement","true");
}
return content;
}
//
public static List formatAddress(String s)
{
if(s==null || s.equals(""))return null;
//String s="caishiyou@21cn.com<蔡世友1>,ddd@ccc.com<ddd>,tt,meybo@cai";
String[] t=s.split(",");
List list=null;
if(t!=null)
{
list=new ArrayList();
for(int i=0;i<t.length;i++)
{
String name,email;
String tmp=t[i];
int tagN=tmp.indexOf("<");
if(tagN>0)
{
email=tmp.substring(tagN+1,tmp.indexOf(">",tagN));
name=tmp.substring(0,tagN);
}
else if(tmp.indexOf("@")>0)
{
name=tmp.substring(0,tmp.indexOf("@"));
email=tmp;
}
else
{
name=tmp;
email=tmp;
}
Map map=new HashMap();
map.put("name",name);
map.put("email",email);
list.add(map);
}
}
return list;
}
/***************************************************************************
* 函 数 名:sendMail(String server,String user,String password,String
* reveiver,String subject,String body) 功 能:发邮件 参 数:server 服务器名,user
* password 用户密码,reveiver 收件人, subject 标题,body 内容 返 回 值:int 编 程:老阚 修 改 人:
* 编写日期:2004-8-11 修改日期: 调用函数:无 修改说明:
**************************************************************************/
public static int sendMail(String server, String user, String password,
String reveiver, String subject, String body) {
int ret = 0;
String hostname = "";
String domain = "";
if (!server.equals("") && (server.indexOf("#") != -1)) {
domain = server.substring(server.indexOf("#") + 1);
hostname = server.substring(0, server.indexOf("#"));
}
String sender = user + "@" + domain;
Properties props = new Properties();// 也可用Properties props =
// System.getProperties();
props.put("mail.smtp.host", hostname);// 存储发送邮件服务器的信息
props.put("mail.smtp.auth", "true");// 同时通过验证
Session s = Session.getInstance(props);// 根据属性新建一个邮件会话
s.setDebug(true);
try {
MimeMessage newMessage = new MimeMessage(s);
InternetAddress from = new InternetAddress(sender);
newMessage.setFrom(from);// 设置发件人
InternetAddress[] replyto = new InternetAddress[1];
replyto[0] = from;
newMessage.setReplyTo(replyto);
newMessage.setSubject(subject);
newMessage.setSentDate(new java.util.Date());
Multipart multipart = new MimeMultipart();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -