www.pudn.com > mail.rar > UploadFile.java


package email; 
 
import java.io.*; 
import java.util.*; 
 
import javax.activation.DataHandler; 
import javax.activation.FileDataSource; 
import javax.mail.BodyPart; 
import javax.mail.Message; 
import javax.mail.Multipart; 
import javax.mail.Session; 
import javax.mail.Transport; 
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 javax.servlet.*; 
import javax.servlet.http.*; 
 
import com.oreilly.servlet.MultipartRequest; 
 
public class UploadFile extends HttpServlet { 
  private String dir = null; 
  public void init(ServletConfig config) throws ServletException{ 
	  super.init(config); 
	  dir = config.getInitParameter("uploadDir"); 
	    if (dir == null) { 
	      throw new ServletException("Please supply uploadDir parameter"); 
	    } 
	  File dirf = new File(dir); 
	  if(!dirf.exists())dirf.mkdir(); 
  } 
  public void doPost(HttpServletRequest req, HttpServletResponse res) 
                                throws ServletException, IOException { 
      req.setCharacterEncoding("ISO-8859-1"); 
	  res.setContentType("text/html"); 
      PrintWriter out = res.getWriter(); 
      UserConfig uc =  
    	  (UserConfig)req.getSession().getAttribute("userConfig"); 
      String host= uc.getSmtp_host() ;  
	  String user= uc.getUser_count(); 
	 String password= uc.getUser_pwd();  
	 System.out.println("fdgfdgfdgfdg5555~~~~~~~~~"+host+":"+uc.getFrom()); 
    try { 
    	System.out.println("~~~~~~开始收发邮件~~~~~~~"); 
      MultipartRequest multi = 
        new MultipartRequest(req, dir, 50 *1024 * 1024,"GBK", 
          new com.oreilly.servlet.multipart.DefaultFileRenamePolicy()); 
 
      //获得属性,并生成Session对象  
      Properties props=new Properties();  
      Session sendsession;  
      Transport transport;  
      sendsession = Session.getInstance(props, null);  
      //向属性中写入SMTP服务器的地址 
      props.put("mail.smtp.host",host); 
      //设置SMTP服务器需要权限认证 
      props.put("mail.smtp.auth","true"); 
      //设置输出调试信息 
      sendsession.setDebug(true); 
      //根据Session生成Message对象 
      Message message = new MimeMessage(sendsession); 
      //设置发信人地址 
      message.setFrom(new InternetAddress(uc.getFrom())) ; 
      //设置e-mail发送时间 
      message.setSentDate(new Date());  
       
      System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 
       
      // Print the parameters we received 
   
      Enumeration params = multi.getParameterNames(); 
      //建立第一部分:文本正文 
	  BodyPart messageBodyPart=new MimeBodyPart(); 
	  System.out.println("~~~~~~MuitiPart~~~~~~~~~~~"); 
      while (params.hasMoreElements()) { 
        String name = (String)params.nextElement(); 
        String value = multi.getParameter(name); 
        System.out.println("~~~~"+name + " = " + value); 
        if(name.equalsIgnoreCase("to")){System.out.println("to==>"+value); 
            //设置收信人地址 
		      message.setRecipient(Message.RecipientType.TO,new InternetAddress(multi.getParameter(name))); 
        } 
        if(name.equalsIgnoreCase("subject")){ 
           //设置e-mail标题 
        	 message.setSubject( multi.getParameter(name)); 
        } 
        if(name.equalsIgnoreCase("text")){ 
//        	新建一个存放信件内容的BodyPart对象 
        	//BodyPart mdp=new MimeBodyPart(); 
//        	给BodyPart对象设置内容和格式/编码方式 
        	//messageBodyPart.setContent( multi.getParameter(name),"text/html"); 
//        	新建一个MimeMultipart对象用来存放BodyPart对 
        	//Multipart mm=new MimeMultipart(); 
            //象(事实上可以存放多个) 
        	//mm.addBodyPart(messageBodyPart);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart) 
        	//message.setContent(mm);//把mm作为消息对象的内容 
        	System.out.println("!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~S!"); 
             //设置e-mail内容 
        	 message.setText( multi.getParameter(name)); 
        	 System.out.println("邮件内容:"+message.getContent()); 
        	 messageBodyPart.setText( multi.getParameter(name)); 
        	 //messageBodyPart.setContent(mm); 
        } 
       
      } 
      // Show which files we received 
        //建立多个部分Multipart实例 
	    Multipart multipart = new MimeMultipart(); 
	    multipart.addBodyPart(messageBodyPart); 
        //建立第二部分:附件	  
	    messageBodyPart=new MimeBodyPart(); 
	    // 获得附件 
	    System.out.println(")()()()()()()()()("); 
      Enumeration files = multi.getFileNames(); 
       
      System.out.println("~~~~~~~~~Attachment~~~~~~~~~~~~~~"); 
      String filename = ""; 
      while (files.hasMoreElements()) { 
    	System.out.println("(~~~~~~~~~~~~~~~~~)"); 
        String name = (String)files.nextElement(); 
        System.out.println("name:"+name); 
        filename = multi.getFilesystemName(name); 
        if(filename!=null){ 
        System.out.println(filename); 
        String original = multi.getOriginalFileName(name); 
        System.out.println(filename+"*&^&^&^*&*&(*)$&^*(*)"); 
        String type = multi.getContentType(name); 
        File f = multi.getFile(name); 
        CommonFile cf = new CommonFile(filename,dir); 
        if (filename != null && !filename.equals(original)) { 
            System.out.println("original file name: " + original); 
            cf.setFileName(original); 
          } 
        System.out.println("type: " + type); 
        if (f != null) { 
          System.out.println("length: " + f.length()); 
        } 
        uc.setCommonFile(cf); 
        System.out.print("name: " + name+"==>"); 
        System.out.println("filename: " + filename+":CommonFile.class==>"+cf.getFileName()); 
        System.out.println("Encoding filename:"+new String(filename.getBytes("ASCII"),"GBK")); 
        FileDataSource fds = new FileDataSource(f); 
        //设置附件的数据处理器 
	    messageBodyPart.setDataHandler(new DataHandler(fds)); 
	    // 设置附件文件名 
	    messageBodyPart.setFileName(MimeUtility.encodeText(filename,null,"B")); 
        //加入第二部分 
	    multipart.addBodyPart(messageBodyPart); 
        // 将多部分内容放到e-mail中 
	    message.setContent(multipart); 
      }} 
      System.out.println("while 之后"); 
	    //保存对于e-mail的修改 
	    message.saveChanges(); 
	    System.out.println("while 之后2"); 
	    //根据Session生成Transport对象 
	      transport=sendsession.getTransport("smtp");  
	      System.out.println("while 之后3"); 
	      //连接到SMTP服务器 
	      transport.connect(host,user,password); 
	      System.out.println("while 之后4"); 
	      //发送e-mail 
	      transport.sendMessage(message,message.getAllRecipients()); 
	      System.out.println("while 之后5"); 
	      //关闭Transport连接 
	      transport.close(); 
	      //附件发送后,将存在本地的文件删除 
	     // System.out.println(uc.getCommonFile().getFileName()+":最后文件名:"+filename+":"+filename==null); 
	      if(filename!=null&&filename.length()!=0){ 
	    	  System.out.println(uc.getCommonFile().getFileName()+":最后文件名:"+filename+":"+filename==null);    	   
	     File file = new File(dir+""+filename); 
	     System.out.println("fiel isExist:"+file.exists()); 
	     if(file.exists()){ 
	    	 if(file.isFile()){ 
	    	 file.delete(); 
	    	 System.out.println("文件已删除"); 
	    	 } } 
         
	      } 
        System.out.println("~~~~~~~~~~~~~~~finished~~~~~~~~~~~~~~~~~"); 
       
      System.out.println("~~~~~~~~~Emitted~~~~~~~~~~~"); 
      req.getSession().setAttribute("userConfig",uc); 
      System.out.println("成功发送....."); 
    } 
    catch (Exception e) { 
    System.out.println(e.getMessage()); 
    } 
         req.getSession().setAttribute("message","邮件已发送..."); 
         res.sendRedirect("mailSender.jsp"); 
  } 
}