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);//发送。
  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/zltao/p/10430204.html
Copyright © 2011-2022 走看看