定时执行自动化脚本-(二)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类,实现的功能是发送邮件,添加多个收件人、多个抄送人、邮件正文部分内容从文件读取
package com.rosa.jmail; import java.io.*; /**
* Created by Administrator on 2017/8/30.
*/
public class FileData {
public static String readTxtFile(String filePath) {
String encoding = "UTF-8";
File file = new File(filePath);
Long filelength = file.length();
byte[] filecontent = new byte[filelength.intValue()];
try {
FileInputStream in = new FileInputStream(file);
in.read(filecontent);
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
return new String(filecontent, encoding);
} catch (UnsupportedEncodingException e) {
System.err.println("The OS does not support " + encoding);
e.printStackTrace();
return "";
}
}
public static void main(String[] arg){ }
}
FileData
package com.rosa.jmail; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties; /**
* Created by Administrator on 2017/8/29.
*/ public class SendMail {
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
String time=format.format(date);
private String host = ""; //smtp服务器
private String from = ""; //发件人地址
private String to =""; //收件人地址
private String tocc=""; //抄送人
private String affix =""; //附件地址
private String affixName =""; //附件名称
private String user = ""; //用户名
private String pwd = ""; //密码
private String subject = ""; //邮件标题
private String filePath1="D:\\apache-jmeter-3.1\\html\\onlineOrder"+time+".txt";
private String filePath2="D:\\apache-jmeter-3.1\\html\\onlineRegister"+time+".txt"; public void setAddress(String from,String to,String tocc,String subject){
this.from = from;
this.to = to;
this.tocc=tocc;
this.subject = subject;
} public void setAffix(String affix,String affixName){
this.affix = affix;
this.affixName = affixName;
} public void send(String host,String user,String pwd) {
this.host = host;
this.user = user;
this.pwd = pwd; Properties props = new Properties(); //设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
props.put("mail.smtp.host", host);
//需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
props.put("mail.smtp.auth", "true"); //用刚刚设置好的props对象构建一个session
Session session = Session.getDefaultInstance(props); //有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
//用(你可以在控制台(console)上看到发送邮件的过程)
session.setDebug(false); //用session为参数定义消息对象
MimeMessage message = new MimeMessage(session);
try{
//加载发件人地址
message.setFrom(new InternetAddress(from));
//加载收件人地址
//多个收件人
if(to!=null&&to.length()>0){
InternetAddress[] internetAddressTo = new InternetAddress().parse(to);
message.addRecipients(Message.RecipientType.TO,internetAddressTo);
}
//加载多个抄送人地址
if(tocc!=null&&tocc.length()>0){
InternetAddress[] internetAddressTocc = new InternetAddress().parse(tocc);
message.addRecipients(Message.RecipientType.CC,internetAddressTocc);
}
// message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); //单个收件人
// message.addRecipient(Message.RecipientType.CC,new InternetAddress(tocc)); //单个抄送人
//加载标题
message.setSubject(subject); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
FileData fd=new FileData();
// 设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText("Hi all:"+"\r\n"+" 附件为"+time+"线上巡检结果。请查收!"+"以下为今日巡检相关信息:"+"\r\n"+fd.readTxtFile(filePath2)
+"\r\n"+fd.readTxtFile(filePath1)); multipart.addBodyPart(contentPart);
//添加附件
BodyPart messageBodyPart= new MimeBodyPart();
DataSource source = new FileDataSource(affix);
//添加附件的内容
messageBodyPart.setDataHandler(new DataHandler(source));
//添加附件的标题
//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?UTF-8?B?"+enc.encode(affixName.getBytes())+"?=");
multipart.addBodyPart(messageBodyPart); //将multipart对象放到message中
message.setContent(multipart);
//保存邮件
message.saveChanges();
// 发送邮件
Transport transport = session.getTransport("smtp");
//连接服务器的邮箱
transport.connect(host, user, pwd);
//把邮件发送出去
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}catch(Exception e){
e.printStackTrace();
}
} public static void main(String[] args){
SendMail cn = new SendMail();
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
String time=format.format(date);
//设置发件人地址、收件人地址和邮件标题
cn.setAddress("发件人地址","收收件人地址","抄送人地址",time+"PC&APP超市&供货商系统巡检报告");
//设置要发送附件的位置和标题
cn.setAffix("D:\\apache-jmeter-3.1\\日常"+time+".zip","日常"+time+".zip");
//cn.setAffix(filepath+"日常"+time+".zip","日常"+time+".zip",filepath+"DetailsReport"+time+".html","DetailsReport"+time+".html");
//设置smtp服务器以及邮箱的帐号和密码
cn.send("smtp.163.com","***@163.com","你的邮箱密码"); }
}
SendMail
4、然后把项目下的src和bin文件夹copy至jmeter目录
5、把javax.mail-1.5.4.jar和activation-1.1.jar copy到ant的\ant\lib目录下
6、编写bulid文件,编译并执行发送邮件的类
完整的build.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project name="zhtx" default="run" basedir=".">
<tstamp>
<format property="date" pattern="yyyy/MM/dd kk:mm:ss"/>
<format property="time" pattern="yyyy-MM-dd"/>
<!--kk是24小时制,KK是12小时制-->
</tstamp> <property name="jmeter.home" value="D:/apache-jmeter-3.1" />
<property name="report.title" value="Jmeter_zhtxAPITestReport"/>
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jtl.dir" value="${basedir}/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="html.dir" value="${basedir}/html" />
<!-- 生成的报告的前缀-->
<!-- 生成的报告的名称-->
<property name="ReportName" value="DetailsReport" />
<property name="ReportName2" value="SummaryReport" /> <property name="jtlName" value="${jtl.dir}/${ReportName}{time}.jtl" />
<property name="htmlName" value="${html.dir}/${ReportName}${time}.html" />
<property name="htmlName2" value="${html.dir}/${ReportName2}${time}.html" />
<property name="zipname" value="日常${time}.zip"/>
<property name="backdir" value="${jmeter.home}/backup"/> <!--项目包位置-->
<property name="SRC" value="${basedir}/Java/src" />
<!--编译包位置-->
<property name="class.dir" value="${basedir}/Java/bin" />
<!--依赖Jar位置-->
<property name="lib.dir" value="${basedir}/extendlibs" />
<!--xslt.classpath依赖包位置-->
<property name="lib.home" value="${jmeter.home}/lib"/>
<!--jmx文件存放位置-->
<property name="jmxFile" value="${jmeter.home}/jmx/antjmx"/> <path id="xslt.classpath">
<fileset dir="${lib.home}" includes="xalan*.jar"/>
<fileset dir="${lib.home}" includes="serializer*.jar"/>
</path>
<path id="jar.path">
<!-- 设置工程编译加载jar 环境 -->
<fileset dir="${lib.dir}/">
<include name="*.jar" />
</fileset>
<pathelement location="${SRC}" />
<pathelement location="${class.dir}" />
</path> <!--项目初始化设置-->
<target name="init" description="init" >
<!--删除jtl文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->
<delete verbose="true" includeemptydirs="true" >
<fileset dir="${jtl.dir}" >
<include name="**/*" />
</fileset>
</delete>
<!--删除html文件夹下生成的所有文件及文件夹包括空目录,但不删除根目录-->
<delete>
<fileset dir="${html.dir}">
<include name="**/*"/>
</fileset>
</delete>
<delete dir="${jmeter.home}/TestResults"/>
<mkdir dir="${jmeter.home}/TestResults"/>
</target> <!--执行jmeter脚本-->
<target name="test" depends="init">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jtlName}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="${jmxFile}" includes="*.jmx" />
<!--声明生成的jtl文件是xml格式,否则会报错 -->
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target> <!--jmeter报告-->
<target name="report" depends="test" >
<xslt
classpathref="xslt.classpath"
force="true"
in="${jtlName}"
out="${htmlName}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${date}"/>
</xslt>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jtlName}"
out="${htmlName2}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${date}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target> <!-- 编译java文件 -->
<target name="compile" depends="report">
<echo message="**************compile**************" />
<javac srcdir="${SRC}" destdir="${class.dir}" encoding="utf-8" classpathref="jar.path" includeantruntime="on" >
</javac>
</target> <!--打zip包&&备份zip包-->
<target name="build" depends="compile">
<!--destfile若不指定文件目录,默认打包到build文件当前目录-->
<zip destfile="${jmeter.home}/TestResults/${zipname}" duplicate="preserve">
<zipfileset dir="${html.dir}" includes="**/*.*"/>
</zip>
<copy includeemptydirs="false" todir="${backdir}">
<fileset dir="${jmeter.home}/TestResults">
<include name="${zipname}"/>
</fileset>
</copy>
</target> <!--执行java文件-->
<target name="run" depends="build">
<java classname="com.rosa.jmail.SendMail"><!--类名,包名不能漏-->
<sysproperty key="file.encoding" value="UTF-8" />
<classpath>
<path location="${class.dir}">
</path>
<!--类文件路径,不能加包名-->
</classpath>
<classpath>
<!--依赖包,多个同理,可用通配符-->
<fileset dir="${lib.dir}" includes="**/*.jar">
</fileset>
</classpath>
</java>
</target> </project>
build.xml
执行build文件后,邮件正文格式如下
定时执行自动化脚本-(二)ant发送邮件及邮件中添加附件的更多相关文章
- 定时执行自动化脚本-(一)导入保存jmeter参数至文件的jar包
1.先完成jmeter脚本编写,具体怎么写此处不再详述,可以参考其他文档. 2.有时你会发现jmeter脚本执行后,有些响应信息你需要提取到文件中,以便后续使用: 怎么实现呢?个人思路就是,先写个ja ...
- php定时执行PHP脚本一些方法总结
本文章总结了php定时执行PHP脚本一些方法总结,有,linux中,windows,php本身的方法,有需要的朋友可参考参考. linux下定时执行php脚本 执行PHP脚本 方法1如果你想定时执行某 ...
- 性能测试培训:批量执行Jmeter脚本之ant调用
性能测试培训:批量执行Jmeter脚本之ant调用 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的load ...
- CentOS 7定时执行python脚本
CentOS 7定时执行python脚本 在CentOS下,可以使用crontab进行定时任务的处理. 一.crontab的安装 默认情况下,CentOS 7中已经安装有crontab,如果没有安装, ...
- 使用sae定时执行Python脚本
使用sae定时执行Python脚本 使用sae定时执行Python脚本 12,May,2014 | 57 Views 毕设压力略大,必须是桂林游的锅.去之前放松了几天,回来又休闲了几天,加上桂林的一周 ...
- win7计划任务定时执行PHP脚本设置图解
做php开发的朋友有时候会希望自己的电脑能每天定时的运行一下某个脚本,但定时执行php脚本这种概念似乎多半是在linux中才提到,下面这篇文章主要和大家分享一下在win7下如何设置计划任务,以实现定时 ...
- Windows 任务调度程序定时执行Python脚本
Windows 任务调度程序(Task Scheduler)可以定时执行程序,本文分享使用Task Scheduler定时执行Python脚本的两种方法. 在控制面版->管理员工具中打开 Tas ...
- appium1.4+华为8.0执行自动化脚本,报启动session失败,原因是unicode_ime_apk\Uni codeIME-debug.apk在手机上已存在,再次安装失败,导致启动session失败,解决办法:换高版本的appium
最开始做Android自动化测试时,通过执行脚本发现报,已安装UnicodeIME-debug.apk,再次安装失败,当时觉得这个apk对我来说没用,就把D:\Program Files (x86)\ ...
- Linux定时执行.sh脚本
因为测试ffmpeg推流用flv方式的话没有做自动断流,所以要先用.sh脚本来执行关流,降低CPU和其他资源占用 首先编写.sh文件 #! /bin/bash echo "kill ffmp ...
随机推荐
- asp.net core 2.0 后台定时自动执行任务
自己写一个类继承BackgroundService internal class RefreshService : BackgroundService { protected override asy ...
- [转]Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)
转自http://blog.csdn.net/c406495762/article/details/75172850 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一 简 ...
- 百度网盘提交提取密码:根据cookies获取loginId 的js
java下载百度网盘中资料,发现网上都只有关于公开分享的实现,没有关于私有分享的实现,抓包发现有一个关键参数:logid url:https://pan.baidu.com/share/verify? ...
- Linux platform平台总线、平台设备、平台驱动
平台总线(platform_bus)的需求来源? 随着soc的升级,S3C2440->S3C6410->S5PV210->4412,以前的程序就得重新写一遍,做着大量的重复工作, 人 ...
- MySQL创建数据库与用户
root远程访问授权 mysql> SHOW DATABASES; +--------------------+ | Database | +---------------- ...
- 二进制 转换成十进制 BCD码(加3移位法)
"原来的二进制数十几位,则左移时就要左移几位" "二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位 ...
- 《Java程序设计》 第二周学习总结
20175334 <Java程序设计>第二周学习总结 教材学习内容总结 了解Java编程风格 认识Java基本数据类型与数组 掌握Java运算符.表达式和语句 教材学习中的问题和解决过程 ...
- 基础 - 获得CPU主频
// 获得cpu主频.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <windows.h> #include ...
- Python日志模块logging&JSON
日志模块的用法 json部分 先开一段测试代码:注意 str可以直接处理字典 eval可以直接将字符串转成字典的形式 dic={'key1':'value1','key2':'value2'} ...
- ss客户端以及tcp,udp,dns代理ss-tproxy在线安装版--centos7.3 x64以上(7.3-7.6x64测试通过)
#!/bin/sh # # Script for automatic setup of an SS-TPROXY server on CentOS 7.3 Minimal. # export PATH ...