zoukankan      html  css  js  c++  java
  • 定时执行自动化脚本-(二)ant发送邮件及邮件中添加附件

    发送邮件及邮件添加附件均需要用java来实现

    1、idea创建一个maven的java项目,目录结构如下

    2、pom.xml文件添加依赖的javax.mail

    <dependencies>
            <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
            <dependency>
                <groupId>com.sun.mail</groupId>
                <artifactId>javax.mail</artifactId>
                <version>1.5.4</version>
            </dependency>
    
        </dependencies>
    pom.xml

    3、编写FileData和SendMail类

    FileData类,实现的是读取文件

    SendMail类,实现的功能是发送邮件,添加多个收件人、多个抄送人、邮件正文部分内容从文件读取

     1 package com.rosa.jmail;
     2 
     3 import java.io.*;
     4 
     5 /**
     6  * Created by Administrator on 2017/8/30.
     7  */
     8 public class FileData {
     9     public static String readTxtFile(String filePath) {
    10         String encoding = "UTF-8";
    11         File file = new File(filePath);
    12         Long filelength = file.length();
    13         byte[] filecontent = new byte[filelength.intValue()];
    14         try {
    15             FileInputStream in = new FileInputStream(file);
    16             in.read(filecontent);
    17             in.close();
    18         } catch (FileNotFoundException e) {
    19             e.printStackTrace();
    20         } catch (IOException e) {
    21             e.printStackTrace();
    22         }
    23         try {
    24             return new String(filecontent, encoding);
    25         } catch (UnsupportedEncodingException e) {
    26             System.err.println("The OS does not support " + encoding);
    27             e.printStackTrace();
    28             return "";
    29         }
    30     }
    31     public static void main(String[] arg){
    32 
    33     }
    34 }
    FileData
      1 package com.rosa.jmail;
      2 
      3 import javax.activation.DataHandler;
      4 import javax.activation.DataSource;
      5 import javax.activation.FileDataSource;
      6 import javax.mail.*;
      7 import javax.mail.internet.*;
      8 import java.text.DateFormat;
      9 import java.text.SimpleDateFormat;
     10 import java.util.Date;
     11 import java.util.Properties;
     12 
     13 /**
     14  * Created by Administrator on 2017/8/29.
     15  */
     16 
     17 public class SendMail {
     18     Date date=new Date();
     19     DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
     20     String time=format.format(date);
     21     private String host = "";  //smtp服务器
     22     private String from = "";  //发件人地址
     23     private String to ="";   //收件人地址
     24     private String tocc="";   //抄送人
     25     private String affix =""; //附件地址
     26     private String affixName =""; //附件名称
     27     private String user = "";  //用户名
     28     private String pwd = "";   //密码
     29     private String subject = ""; //邮件标题
     30     private String filePath1="D:\apache-jmeter-3.1\html\onlineOrder"+time+".txt";
     31     private String filePath2="D:\apache-jmeter-3.1\html\onlineRegister"+time+".txt";
     32 
     33 
     34 
     35     public void setAddress(String from,String to,String tocc,String subject){
     36         this.from = from;
     37         this.to   = to;
     38         this.tocc=tocc;
     39         this.subject = subject;
     40     }
     41 
     42     public void setAffix(String affix,String affixName){
     43         this.affix = affix;
     44         this.affixName = affixName;
     45     }
     46 
     47     public void send(String host,String user,String pwd) {
     48         this.host = host;
     49         this.user = user;
     50         this.pwd  = pwd;
     51 
     52         Properties props = new Properties();
     53 
     54 
     55         //设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
     56         props.put("mail.smtp.host", host);
     57         //需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
     58         props.put("mail.smtp.auth", "true");
     59 
     60         //用刚刚设置好的props对象构建一个session
     61         Session session = Session.getDefaultInstance(props);
     62 
     63         //有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
     64         //用(你可以在控制台(console)上看到发送邮件的过程)
     65         session.setDebug(false);
     66 
     67         //用session为参数定义消息对象
     68         MimeMessage message = new MimeMessage(session);
     69         try{
     70             //加载发件人地址
     71             message.setFrom(new InternetAddress(from));
     72             //加载收件人地址
     73             //多个收件人
     74             if(to!=null&&to.length()>0){
     75                 InternetAddress[] internetAddressTo = new InternetAddress().parse(to);
     76                 message.addRecipients(Message.RecipientType.TO,internetAddressTo);
     77             }
     78             //加载多个抄送人地址
     79             if(tocc!=null&&tocc.length()>0){
     80                 InternetAddress[] internetAddressTocc = new InternetAddress().parse(tocc);
     81                 message.addRecipients(Message.RecipientType.CC,internetAddressTocc);
     82             }
     83           //  message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));  //单个收件人
     84           //  message.addRecipient(Message.RecipientType.CC,new InternetAddress(tocc)); //单个抄送人
     85             //加载标题
     86             message.setSubject(subject);
     87 
     88             // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
     89             Multipart multipart = new MimeMultipart();
     90             FileData fd=new FileData();
     91             //   设置邮件的文本内容
     92             BodyPart contentPart = new MimeBodyPart();
     93             contentPart.setText("Hi all:"+"
    "+"        附件为"+time+"线上巡检结果。请查收!"+"以下为今日巡检相关信息:"+"
    "+fd.readTxtFile(filePath2)
     94             +"
    "+fd.readTxtFile(filePath1));
     95 
     96             multipart.addBodyPart(contentPart);
     97             //添加附件
     98             BodyPart messageBodyPart= new MimeBodyPart();
     99             DataSource source = new FileDataSource(affix);
    100             //添加附件的内容
    101             messageBodyPart.setDataHandler(new DataHandler(source));
    102             //添加附件的标题
    103             //这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
    104             sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
    105             messageBodyPart.setFileName("=?UTF-8?B?"+enc.encode(affixName.getBytes())+"?=");
    106             multipart.addBodyPart(messageBodyPart);
    107 
    108 
    109             //将multipart对象放到message中
    110             message.setContent(multipart);
    111             //保存邮件
    112             message.saveChanges();
    113             //   发送邮件
    114             Transport transport = session.getTransport("smtp");
    115             //连接服务器的邮箱
    116             transport.connect(host, user, pwd);
    117             //把邮件发送出去
    118             transport.sendMessage(message, message.getAllRecipients());
    119             transport.close();
    120         }catch(Exception e){
    121             e.printStackTrace();
    122         }
    123     }
    124 
    125     public static void main(String[] args){
    126         SendMail cn = new SendMail();
    127         Date date=new Date();
    128         DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
    129         String time=format.format(date);
    130         //设置发件人地址、收件人地址和邮件标题
    131         cn.setAddress("发件人地址","收收件人地址","抄送人地址",time+"PC&APP超市&供货商系统巡检报告");
    132         //设置要发送附件的位置和标题
    133         cn.setAffix("D:\apache-jmeter-3.1\日常"+time+".zip","日常"+time+".zip");
    134         //cn.setAffix(filepath+"日常"+time+".zip","日常"+time+".zip",filepath+"DetailsReport"+time+".html","DetailsReport"+time+".html");
    135         //设置smtp服务器以及邮箱的帐号和密码
    136         cn.send("smtp.163.com","***@163.com","你的邮箱密码");
    137 
    138     }
    139 }
    SendMail

    4、然后把项目下的src和bin文件夹copy至jmeter目录

    5、把javax.mail-1.5.4.jar和activation-1.1.jar  copy到ant的antlib目录下

    6、编写bulid文件,编译并执行发送邮件的类

    完整的build.xml文件

      1 <?xml version="1.0" encoding="UTF-8"?>  
      2   
      3 <project name="zhtx" default="run" basedir="."> 
      4         <tstamp>   
      5         <format property="date" pattern="yyyy/MM/dd kk:mm:ss"/>
      6         <format property="time" pattern="yyyy-MM-dd"/>
      7         <!--kk是24小时制,KK是12小时制-->        
      8         </tstamp> 
      9       
     10         <property name="jmeter.home" value="D:/apache-jmeter-3.1" />
     11         <property name="report.title" value="Jmeter_zhtxAPITestReport"/>    
     12     <!-- jmeter生成jtl格式的结果报告的路径-->  
     13         <property name="jtl.dir" value="${basedir}/jtl" />  
     14     <!-- jmeter生成html格式的结果报告的路径-->  
     15         <property name="html.dir" value="${basedir}/html" />  
     16     <!-- 生成的报告的前缀-->
     17     <!-- 生成的报告的名称-->     
     18         <property name="ReportName" value="DetailsReport" />
     19         <property name="ReportName2" value="SummaryReport" />
     20         
     21         <property name="jtlName" value="${jtl.dir}/${ReportName}{time}.jtl" />  
     22         <property name="htmlName" value="${html.dir}/${ReportName}${time}.html" />
     23         <property name="htmlName2" value="${html.dir}/${ReportName2}${time}.html" />
     24         <property name="zipname" value="日常${time}.zip"/>
     25         <property name="backdir" value="${jmeter.home}/backup"/>
     26 
     27     <!--项目包位置-->
     28         <property name="SRC" value="${basedir}/Java/src" />
     29         <!--编译包位置-->
     30         <property name="class.dir" value="${basedir}/Java/bin" />
     31         <!--依赖Jar位置-->
     32         <property name="lib.dir" value="${basedir}/extendlibs" />
     33         <!--xslt.classpath依赖包位置-->
     34         <property name="lib.home" value="${jmeter.home}/lib"/>
     35         <!--jmx文件存放位置-->
     36         <property name="jmxFile" value="${jmeter.home}/jmx/antjmx"/>
     37         
     38         <path id="xslt.classpath">
     39             <fileset dir="${lib.home}" includes="xalan*.jar"/>     
     40             <fileset dir="${lib.home}" includes="serializer*.jar"/>
     41         </path>
     42         <path id="jar.path">
     43             <!-- 设置工程编译加载jar 环境 -->
     44             <fileset dir="${lib.dir}/">
     45                 <include name="*.jar" />
     46             </fileset>
     47             <pathelement location="${SRC}" />
     48             <pathelement location="${class.dir}" />
     49         </path>
     50     
     51     <!--项目初始化设置-->
     52     <target name="init" description="init" >
     53     <!--删除jtl文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->
     54         <delete verbose="true" includeemptydirs="true" >
     55             <fileset dir="${jtl.dir}" >
     56                 <include name="**/*" />
     57             </fileset>
     58          </delete>
     59          <!--删除html文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->
     60         <delete>
     61             <fileset dir="${html.dir}">
     62                 <include name="**/*"/>
     63             </fileset>
     64         </delete>
     65         <delete dir="${jmeter.home}/TestResults"/>
     66         <mkdir dir="${jmeter.home}/TestResults"/>
     67     </target>
     68     
     69      <!--执行jmeter脚本--> 
     70     <target name="test" depends="init">  
     71         <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />  
     72         <jmeter jmeterhome="${jmeter.home}" resultlog="${jtlName}">  
     73             <!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->  
     74             <testplans dir="${jmxFile}" includes="*.jmx" />
     75             <!--声明生成的jtl文件是xml格式,否则会报错 -->
     76             <property name="jmeter.save.saveservice.output_format" value="xml"/>            
     77         </jmeter>  
     78     </target>  
     79         
     80     <!--jmeter报告-->
     81     <target name="report" depends="test" >   
     82         <xslt 
     83               classpathref="xslt.classpath"
     84               force="true"
     85               in="${jtlName}"  
     86               out="${htmlName}"  
     87               style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
     88               <param name="titleReport" expression="${report.title}"/>
     89               <param name="dateReport" expression="${date}"/>              
     90          </xslt>
     91          <xslt 
     92               classpathref="xslt.classpath"
     93               force="true"
     94               in="${jtlName}"  
     95               out="${htmlName2}"
     96               style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
     97               <param name="titleReport" expression="${report.title}"/>
     98               <param name="dateReport" expression="${date}"/>              
     99          </xslt>
    100         <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->  
    101         <copy todir="${html.dir}">  
    102             <fileset dir="${jmeter.home}/extras">  
    103                 <include name="collapse.png" />  
    104                 <include name="expand.png" />  
    105             </fileset>  
    106         </copy>  
    107     </target>
    108     
    109     <!-- 编译java文件  -->
    110     <target name="compile" depends="report">
    111             <echo message="**************compile**************" />
    112             <javac srcdir="${SRC}" destdir="${class.dir}" encoding="utf-8" classpathref="jar.path" includeantruntime="on" >
    113             </javac>
    114     </target>
    115     
    116     <!--打zip包&&备份zip包-->  
    117     <target name="build" depends="compile">
    118         <!--destfile若不指定文件目录,默认打包到build文件当前目录-->
    119         <zip destfile="${jmeter.home}/TestResults/${zipname}" duplicate="preserve">
    120          <zipfileset dir="${html.dir}" includes="**/*.*"/>
    121         </zip>
    122         <copy includeemptydirs="false" todir="${backdir}">
    123         <fileset dir="${jmeter.home}/TestResults">
    124           <include name="${zipname}"/>
    125         </fileset>
    126         </copy>
    127     </target>  
    128     
    129     <!--执行java文件-->
    130     <target name="run" depends="build">    
    131         <java classname="com.rosa.jmail.SendMail"><!--类名,包名不能漏--> 
    132         <sysproperty key="file.encoding" value="UTF-8" />        
    133           <classpath>  
    134               <path location="${class.dir}">
    135               </path>
    136               <!--类文件路径,不能加包名-->  
    137           </classpath>  
    138           <classpath>  
    139               <!--依赖包,多个同理,可用通配符-->  
    140               <fileset dir="${lib.dir}" includes="**/*.jar">
    141               </fileset>
    142           </classpath>
    143         </java>    
    144     </target>
    145     
    146       
    147        
    148 </project>  
    build.xml

    执行build文件后,邮件正文格式如下

  • 相关阅读:
    Linux中touch和mkdir、vi的区别
    宿主机和虚拟机的IP地址和端口号的区别
    测试环境
    Fiddler
    Linux 常用指令
    测试环境的网址与账号密码
    书签
    快速寻找满足条件的两个数
    android 资讯阅读器(二)
    android 资讯阅读器
  • 原文地址:https://www.cnblogs.com/chenchen-tester/p/7462310.html
Copyright © 2011-2022 走看看