这篇文章写的简单明了,直接拷贝即可实现,唯一我觉得可能不够友好的是就是JAR包没有体现对刚接触JAVA邮件的小伙伴来说可能有点难度因此这次将对应的几个JAR包出处以及MAVEN依赖增加一下。
思路:Java创建Excel,返回一个ByteArrayOutputStream 流 ==> sendEmail()接受ByteArrayOutputStream 流以附件的形式发送出去。
本项目为maven项目,需要导入 JAVA POI 依赖,JAVA MAIL依赖。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version><!--注意:20160810版本不支持JSONArray-->
</dependency>
<!-- Javamail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.4</version>
</dependency>
<!--读取excel文件-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--文件上传组件-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>创建Excel表格:
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.json.JSONArray;
import java.io.IOException;
public class CreatExcel {
public static ByteArrayOutputStream creatExcel(String[] title, JSONArray all) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//创建一个表格
Workbook workbook = new XSSFWorkbook();
// 创建一个工作薄对象
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("sheet1");
//设置首行
XSSFRow row0 = sheet.createRow(0);
for(int i=0;i<title.length;i++) {
XSSFCell cell = (XSSFCell) row0.createCell(i);
cell.setCellValue(title[i]);
}
try {
workbook.write(baos); // write excel data to a byte array
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("创建成功 office excel");
return baos;
}
}Java 邮件发送附件:
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.json.JSONArray;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;
import java.io.IOException;
import java.util.Properties;
public class SendEmail {
public static boolean sendEmail(String to,ByteArrayOutputStream baos) {
// 发件人电子邮箱
String from = "*****@";
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器 ->QQ 邮件服务器
properties.setProperty("mail.smtp.host", "smtp.");
properties.put("mail.smtp.auth", "true");
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("*******@", "******"); //发件人邮件用户名、授权码
}
});
try{
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(,new InternetAddress(to));
// Set Subject: 头部头字段
message.setSubject("This is the Subject Line!");
/*添加附件*/
Multipart multipart = new MimeMultipart();
if(baos != null) {
MimeBodyPart fileBody = new MimeBodyPart();
DataSource source = new ByteArrayDataSource(baos.toByteArray(), "application/msexcel");
fileBody.setDataHandler(new DataHandler(source));
// 中文乱码问题
fileBody.setFileName(MimeUtility.encodeText("ww.xlsx"));
multipart.addBodyPart(fileBody);
}
message.setContent(multipart);
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....from runoob.com");
}catch (MessagingException mex) {
mex.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
JSONArray all = new JSONArray();
String[] title = {"哈哈","hahahah"};
ByteArrayOutputStream baos = CreatExcel.creatExcel(title, all);
SendEmail.sendEmail("******@",baos);
}
}顺带说一句如何获取QQ邮箱的授权码。























