774a3a64580dee956755eeac27a1a1c1450a98ed.svn-base 7.8 KB
package com.espeed.tool;

import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import com.espeed.pojo.YxySendMailMaster;
/*
 * 程序名称:    	EspeedMail_时速邮箱
 * 程序版本:    	V1.0
 * 作    者:    	深圳市科飞时速网络技术有限公司(0755-88843776)
 * 版权所有:    	深圳市科飞时速网络技术有限公司
 * 技术支持:    	Tech@21gmail.com
 * 单元名称:    生成本地邮件(营销邮)
 * 开始时间:    	2013.12.13
 * 程 序 员:    	谢勇
 * 最后修改:    
 * 备    注:		如需修改请通知程序员    
 */
public class GreateEmlFile {

	//private static MimeMessage mimeMsg = null; // MIME邮件对象
	//private static javax.mail.Session mailSession = null;
	
	/**生成eml文件*/
	public static List<Object> GreateMail(YxySendMailMaster yxysendmailmaster,String loginid,String domain,String uploadattrName,String usersetpath)throws Exception{
		MimeMessage mimeMsg = null;
		Session mailSession = null;
		
		List<Object> RemlPath=new ArrayList<Object>();
		RemlPath.add("0");
		RemlPath.add("");
		RemlPath.add("");
		RemlPath.add("0");
		RemlPath.add("");
	
		String pathew="";
		pathew = new GreateEmlFile().getClass().getResource("/").getPath();
		pathew = pathew.substring(1, pathew.length());
		pathew = pathew.replace("/", "//");
		pathew = pathew.replace("//WEB-INF//classes//", "");
		String context=yxysendmailmaster.getBody();//内容
		
		//获取上传的附件名
		String newUpload=uploadattrName.replaceAll("\"", "");
		String [] newstr=newUpload.split(",");//分割多个附件
		
		int isAttr=0;//附件个数
		//1.获取附件
		String fileNames[]=new String[0];//定义附件名
		if(newstr==null||newstr[0].equals("")){//判断是否存在附件
			fileNames=new String[0];		
		}else{			
			String sysPath=pathew+"/mailtempfile/"+domain+"/"+loginid+"/attachment";
			fileNames=new String[newstr.length];
		    for (int i = 0; i < newstr.length; i++) {
		    	fileNames[i]=sysPath+"\\"+newstr[i];
		    }
		}
		isAttr=fileNames.length;//附件个数				
		
		//变量定义
		String mailName=yxysendmailmaster.getSender();//发件人
		String sendMail=yxysendmailmaster.getSend_email();//发件人邮箱
		String replyEmail=yxysendmailmaster.getReply_email();//回复邮箱
		String title=yxysendmailmaster.getSubject();//主题
			

		//------- 设置from、to等信息----------
		mimeMsg = new javax.mail.internet.MimeMessage(mailSession);

		InternetAddress sentFrom;
		//发件人
		sentFrom = new InternetAddress(sendMail ,mailName,"UTF-8");
		mimeMsg.setFrom(sentFrom);		
		//主题
		mimeMsg.setSubject(title,"UTF-8");
	
		// ---设置回复人地址---------------
		InternetAddress addressis;
		addressis = new InternetAddress(replyEmail);
		InternetAddress[] addrs = new InternetAddress[1];
		addrs[0] = addressis;
		mimeMsg.setReplyTo(addrs);

		// -------------------------------------
		MimeBodyPart messageBodyPart1 = new MimeBodyPart();
		messageBodyPart1.setHeader("Content-Transfer-Encoding", "base64");
		
		
		//--------附件--------------------
		MimeMultipart multipart = new MimeMultipart();// 附件传输格式
		multipart.setSubType("related");//这句很重要
		multipart.addBodyPart(messageBodyPart1);

		for (int j = 0; j < fileNames.length; j++) {
			MimeBodyPart messageBodyPart2 = new MimeBodyPart();
			messageBodyPart2.setHeader("Content-Transfer-Encoding", "base64");
			//messageBodyPart2.setContentLanguage("UTF-8");
			// 选择出每一个附件名
			String filename = fileNames[j].split("#####")[0];
			String displayname = fileNames[j].split("#####")[1];
			// 得到数据源
			FileDataSource fds = new FileDataSource(filename);
			// 得到附件本身并至入BodyPart
			messageBodyPart2.setDataHandler(new DataHandler(fds));// 得到文件名同样至入BodyPart
			messageBodyPart2.setHeader("Content-Type", "application/octet-stream;name="+displayname);
			messageBodyPart2.setFileName(MimeUtility.encodeText(displayname,"UTF-8","B"));
			multipart.addBodyPart(messageBodyPart2);
		}
		String resultpicpath="";//图片路径
		int picindex = 0;
		//11.判断是否有图片
		String[] picpath=context.split("<img");
		for(int i=0;i<picpath.length;i++){
			if(picpath[i].contains("src")){
				//说明内容中有本地图片
				int index=picpath[i].indexOf("mailtempfile/");
				if(index==-1){ 
					continue;
				}
				//说明图片是以http开头的本地图片则不进行打包图片操作直接以http方式显示
				int index2=picpath[i].indexOf("http://edm119.21gmail.com");
				if(index2!=-1){
					continue;
				}
				//处理字符
				String[] picAarry=picpath[i].split("src=\"");
				int end=picAarry[1].indexOf("\"");
				String result=picAarry[1].substring(0,end);
				
				//获取图片路径
				int pathbegin=result.indexOf("mailtempfile");
				String path=result.substring(pathbegin,result.length());
				String  picpaths=pathew+"\\"+path;//图片真实路径
				
				//获取图片保存名字
				String[] filenamestr=result.split("/");
				String picname=filenamestr[filenamestr.length-1];
				resultpicpath+=picname+"#####";
			
				//替换图片
				context=context.replaceFirst(result,"cid:IMG"+picindex);
				
//				int end=0;
//				end=picpath[i].indexOf("/>");
//				
//				String picfilepath=picpath[i].substring(index,end);
//				picfilepath=picfilepath.replaceAll("\"", "");
//				picfilepath=picfilepath.split(" ")[0];
//				String newPstr=pathew+"\\"+picfilepath;//文件存放路径	
//				String  picpaths=newPstr.split(" ")[0].replaceAll("\"", "");
//				int endb=picpath[i].indexOf("/>");
//				String newb="<img"+picpath[i].substring(0,endb)+"/>";//替换字符
//				context=context.replaceFirst(newb,"<img src='cid:IMG"+i+"'/>");
//				
//				//该图片的真实名字
//				String picname="";
//				int begin=picfilepath.indexOf("pic/");
//				picname=picfilepath.substring(begin+4,picfilepath.length());
//				resultpicpath+=picname+"#####";
				
				//加入图片源码
				File pf=new File(picpaths);
				if(pf.exists()){
					MimeBodyPart gifBodyPart=new MimeBodyPart();  
					FileDataSource fds=new FileDataSource(pf);//图片所在的目录的绝对路径 
                    gifBodyPart.setDataHandler(new DataHandler(fds)); 
                    gifBodyPart.setHeader("Content-Type", "image/jpeg");
                    gifBodyPart.setFileName(MimeUtility.encodeText("espeedpic.jpg","UTF-8","B"));
                    gifBodyPart.setContentID("<IMG"+picindex+">");   //cid的值  
                    multipart.addBodyPart(gifBodyPart);
				}
				
				picindex=picindex+1;
			}
		}		
		
           messageBodyPart1.setContent(context,"text/html" + ";charset=" + "UTF-8");
			
			mimeMsg.setContent(multipart);

			//------------- 设置信件头的发送日期---------------
			mimeMsg.setSentDate(new Date());
			
			//文件存放路径
			//以当前用户名+当前日期为文件名
			SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHssmm");
			String nowDate=df.format(new Date());
			String emlfileName="";
			emlfileName=loginid+nowDate + ".eml";
			//保存邮件
			File dir = new File(usersetpath);
			dir.mkdirs();// 创建所有目录,包括子目录	
			mimeMsg.writeTo(new FileOutputStream(dir+"\\" + emlfileName));
			File files=new File(dir+"\\" + emlfileName);
			//返回值
			RemlPath.set(0,files.length());//文件大小       	 	
			RemlPath.set(1,usersetpath + "\\" + emlfileName);//返回eml存放路径
			//RemlPath.set(2,"");//文件key
			RemlPath.set(3,isAttr);//是否有附件
			RemlPath.set(4,resultpicpath);//图片路径
			
			return RemlPath;
	}
	
}