发送邮件及邮件添加附件均需要用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文件后,邮件正文格式如下

最新文章

  1. 【BZOJ】3835: [Poi2014]Supercomputer
  2. AngularJs学习的前景及优势
  3. HDU 2860 并查集
  4. php实现文件安全下载
  5. php常用配置(php.ini)
  6. [置顶] access函数-linux
  7. 成为java高手的八大条件
  8. css font简写规则
  9. [图形学] 习题8.12 NLN二维线段裁剪算法实现
  10. asp.net core 的 razor pages 如何使用ajax调用后台方法
  11. 扎实学Java之数组与方法
  12. python脚本练习之编译安装python
  13. Sublime Text3 3143 注册码,亲测可用!
  14. sqoop往远程hdfs写入数据时出现Permission denied 的问题
  15. Spring Cloud 入门 之 Zuul 篇(五)
  16. MYSQL COST optimizer
  17. 网络协议之bt---bt协议详解 DHT篇(下)
  18. Android深入理解Context(三)Context完全解析
  19. /usr/bin/python与/usr/bin/env python的区别
  20. Python基础===使用virtualenv创建一个新的运行环境

热门文章

  1. 将string转为同名类名,方法名。(c#反射)
  2. 2、php中字符串单引号好和双引号的区别
  3. putty安装和使用
  4. js鼠标拖动(转载)
  5. WampServer的下载方法
  6. Dapper/SqlMapper映射对应问题
  7. 微信小程序 实现三级联动-省市区
  8. java常见面试题及答案 11-20(JVM)
  9. ELK+Beats日志分析系统部署
  10. spring 之 property-placeholder 分析