145f5d7d2aa3d3116f48fa6bc7b280efd38266b1.svn-base 6.6 KB
package com.espeed.yxy.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.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.yxy.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{
		List<Object> RemlPath=new ArrayList<Object>();
		RemlPath.add("0");
		RemlPath.add("");
		RemlPath.add("");
		RemlPath.add("0");
		RemlPath.add("");
	
		//营销web路径(文件路径)
		String pathew=ConfigPath.getYxyServicePath();
		//内容
		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="";//图片路径
		//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;
				}
				//处理字符
				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+=path+"#####";
			
				//替换图片
				context=context.replaceFirst(result,"cid:IMG"+i);

				//加入图片源码
				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"+i+">");   //cid的值  
                    multipart.addBodyPart(gifBodyPart);
				}
				}
		}		
		
           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;
	}
	
}