zoukankan      html  css  js  c++  java
  • .Net转Java自学之路—基础巩固篇三十二(JavaMail)

    commons-fileupload组件:
      commons-fileupload.jar
      commons-io.jar
      该组件会解析request中的上传数据,解析后的结果是一个表单项数据封装到一个FileItem对象中,只需调用FileItem中的方法即可。

    上传三步:相关类

      工厂:DisFileItemFactory

      解析器:ServletFileUpload

      表单项:FileItem

    //ServletFileUpload:
        setFileSizeMax(n*1024);//限制单个文件大小
        setSizeMax(1024*1024*n);//限制整个表单大小nM
    //FileItem:
        /*普通表单项相关*/
        boolean isFormField();//是否为普通表单项。true为普通表单项,false为文件表单项
        String getFieldName();//返回当前表单项的名称。
        String getString(String charset);//返回表单项的值。
        /*文件表单项相关*/
        String getName();//获取上传的文件名称。
        long getSize();//获取上传文件字节数。
        InputStream getInputStream();//获取上传文件对应的输入流。
        void write(File destFile);//将上传文件内容保存到指定文件中。
        String getContentType();//获取文件类型
    //设置缓存大小与临时目录:
        new DiskFileItemFactory(n*1024,new File("C:/temp"));
        /*
        * n*1024:缓存大小
        * new File("C:/temp"):硬盘临时目录
        */

    下载:就是向客户端响应字节流。
      下载要求:俩个头一个流。
        Content-Type:传输给客户端的文件是生命MIME类型,例:image/pjpeg。通过文件名称调用ServletContext的getMimeType()得到MIME类型。
        Content-Disposetion:默认值为inline,表示在浏览器窗口中打开,attachment;filename=xxx。在filename=后面跟显示在下载框中的文件名称。

    实例:上传图片

    <form action="<c:url value="/TestUploadServlet">" method="post" enctype="multipart/form-data">
        文件名称:<input type="text" name="filename" />
        文件上传:<input type="file" name="nfile" />
        <input type="submit" value="上传" />
    </form>
    public class TestUploadServlet extends HttpServlet {
        public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            
            DisFileItemFactory dfactory=new DisFileItemFactory();
            ServletFileUpload sfu=new ServletFileUpload(dfactory);
            try{
                List<FileItem> fileItemList=sfu.parseRequest(request);
                FileItem fi1=fileItemList.get(0);//对应普通表单项
                FileItem fi2=fileItemList.get(1);//对应文件表单项
                
                String path=this.getServletContext().getRealPath("/WEB-INF/files/");//存储的跟路径
                
                File destFile=new File(path);
                fi2.write(destFile);//保存
            }catch(FileUploadException ex){
                
            }catch(Exception ex){
                
            }
            
        }
    }

    JavaMail:

      是Java提供的一组API,用来发送和接收邮件。

      邮件协议:

        与http提供的一组API,用来发送和接收邮件。

        SMTP:Simple Mail Transfer Protocol 简单邮件传输协议;发送邮件协议。默认端口号:25

        POP3:Post Office Protocol Version 3 邮局协议第三版;接收邮件协议。默认端口号:110

        IMAP:Internet Message Access Protocol 因特网消息访问协议,收发邮件协议。

      核心类:

        Session:得到Session,需要使用Session.getInstance(Properties,Authenricator);

        MimeMessage:表示一个邮件对象,它有一系列的setXXX()的设置方法。

        TransPort:它只有一个发邮件的功能。

      当发送包含附件的邮件时,邮件体为多部件形式。

        1、创建一个多部件的部件内容。MimeMultipart

          MimeMultipart就是一个集合,用来装载多个主体部件。

        2、需要创建俩个主体部件,一个为文本内容,另一个为附件。

          主体部分:MimeBodyPart

        3、把MimeMultipart设置给MimeMessage的内容。

    实例:发送普通邮件

    Propertes prop=new Propertes();
    prop.setProperty("mail.host","smtp.163.com");//设置服务器
    prop.setProperty("mail.smtp.auth","true");
    
    Authenticator auth=new Authenticator(){
        protected PasswordAuthentication getPassworkAuthentication(){
            return new PasswordAuthentication("用户名","密码");
        }
    }
    
    Session session=Session.getInstance(prop,auth);
    
    MimeMessage msg=new MimeMessage(session);
    msg.setFrom(new InternetAddress("fajianren@163.com"));//设置发件人
    msg.setRecipients(RecipientType.TO,"shoujian@126.com");//设置收件人
    msg.setRecipients(RecipientType.CC,"chaosong@126.com");//设置抄送
    msg.setRecipients(RecipientType.BCC,"ansong@126.com");//设置暗送
    
    msg.setSubject("标题");
    msg.setContent("邮件内容","text/html;charset=utf-8");
    
    Transport.send(msg);//发送。

    实例:发送带有附件的邮件

    Propertes prop=new Propertes();
    prop.setProperty("mail.host","smtp.163.com");//设置服务器
    prop.setProperty("mail.smtp.auth","true");
    
    Authenticator auth=new Authenticator(){
        protected PasswordAuthentication getPassworkAuthentication(){
            return new PasswordAuthentication("用户名","密码");
        }
    }
    
    Session session=Session.getInstance(prop,auth);
    
    MimeMessage msg=new MimeMessage(session);
    msg.setFrom(new InternetAddress("fajianren@163.com"));//设置发件人
    msg.setRecipients(RecipientType.TO,"shoujian@126.com");//设置收件人
    msg.setRecipients(RecipientType.CC,"chaosong@126.com");//设置抄送
    msg.setRecipients(RecipientType.BCC,"ansong@126.com");//设置暗送
    
    msg.setSubject("标题");
    
    MimeMultipart list=new MimeMultipart();//创建多部分主体
    
    MimeBodyPart part=new MimeBodyPart();//创建MimeBodyPart
    part.setContent("邮件内容","text/html;charset=utf-8");
    list.addBodyPart(part);
    
    MimeBodyPart part2=new MimeBodyPart();//创建MimeBodyPart
    part2.attachFile(new File(path));//设置附件的内容。
    part2.setFileName(MimeUtility.encodingText("附件名称"));//设置附件中显示的附件名称,其中MimeUtility.encodingText设置乱码问题
    list.addBodyPart(part2);
    
    msg.setContent(list);//把它设置给邮件作为邮件内容
    
    Transport.send(msg);//发送。
  • 相关阅读:
    bzoj3751 / P2312 解方程
    P1270 “访问”美术馆(树形dp)
    [bzoj1085][SCOI2005]骑士精神
    [bzoj1208][HNOI2004]宠物收养所
    [bzoj1196][HNOI2006]公路修建问题
    [bzoj1093][ZJOI2007]最大半连通子图
    [bzoj1103][POI2007]大都市meg
    [Apio2009][bzoj1179]Atm
    [bzoj1191][HNOI2006]超级英雄Hero
    [bzoj2458][BeiJing2011]最小三角形
  • 原文地址:https://www.cnblogs.com/zltao/p/10430204.html
Copyright © 2011-2022 走看看