首页 > 编程语言 >JAVA 数据写入excel并发送邮件

JAVA 数据写入excel并发送邮件

时间:2024-05-31 16:32:33浏览次数:31  
标签:JAVA InternetAddress 写入 excel multipart 邮箱 new message 邮件

写这个的时候PLM系统还没有开发好,开发这个系统的外包团队每次开会都会被骂,感觉他们快顶不住了,估计完成不了了,烂尾之后应该会有很多需求扔给我。新领导上任之后说这边能不能发邮件,先熟悉一下怎么发邮件吧,这个功能大概率给我来做了

流程:

​ 先导包 => 邮箱开启配置 => java写好配置类 => 测试发送 => 数据写入excel => 邮件带附件发送

邮箱jar包

<dependencies>
    <dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
    </dependency>
</dependencies>

邮箱开启配置

我这个是163的,开启之后会生成授权码,记得复制粘贴到自己的项目配置文件里面去

邮箱配置类

public final class JavaMailUtil {
    //文件地址 上面是linux地址,下面是我自己本地测试用的
    //public final static String FILEPATH = "/wenjie/javaProject/bomexcelfiles";
    public final static String FILEPATH = "e:/Users/liuwenj/Desktop/";
    
    private JavaMailUtil() {
    }
    public static Session createSession() {
        //账号信息
        String username = "";//邮箱发送账号
        String password = "";//邮箱授权码
        //创建一个配置文件,并保存
        Properties props = new Properties();
        //SMTP服务器连接信息
        //126——smtp.126.com
        //163——smtp.163.com
        props.put("mail.smtp.host", "smtp.126.net");//SMTP主机名
        //126——25
        //163——645 如果645一直连不上,可以换成25试一试
        props.put("mail.smtp.port", "25");// 主机端口号
        props.put("mail.smtp.auth", "true");// 是否需要用户认证
        props.put("mail.smtp.starttls.enable", "true");// 启用TlS加密
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // TODO Auto-generated method stub
                return new PasswordAuthentication(username, password);
            }
        });
        //控制台打印调试信息
        session.setDebug(true);
        return session;
    }
}

测试发送纯文本

//创建Session会话
Session session = JavaMailUtil.createSession();

//创建邮件对象
MimeMessage message = new MimeMessage(session);
message.setSubject("主题");
message.setFrom(new InternetAddress("发送者邮箱"));
//发送给一个人
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("接收者邮箱"));
//发送给多个人
//message.setRecipients(MimeMessage.RecipientType.CC, new InternetAddress[] {new InternetAddress("接收者邮箱")});

//纯文本信息
message.setText("文本信息:来自于公司PLM系统测试");
//发送
Transport.send(message);

数据写入excel,并生成文件

先导jar

<!-- Apache POI -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

写入数据到excel

Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Bom");
//第一行的数据名
List<String> labelList = Arrays.asList("物料编码", "描述");
Row row = sheet.createRow(0);
for (int i = 0; i < labelList.size(); i++) {
    row.createCell(i).setCellValue(labelList.get(i));
}
int rowNo = 1;
//获取数据然后放入Excel
List<Map<String, Object>> bomList = plmDataService.getBomNotPerfect();
for (Map<String, Object> bom : bomList) {
    String no = (String) bom.get("ITEM_NUMBER");
    String desc = (String) bom.get("DESCRIPTION");
    Row tempRow = sheet.createRow(rowNo);
    rowNo++;

    tempRow.createCell(0).setCellValue(no);
    tempRow.createCell(1).setCellValue(desc);
}
// 写入数据到Excel
try (FileOutputStream outputStream = new FileOutputStream(JavaMailUtil.FILEPATH + fileName)) {
    workbook.write(outputStream);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        workbook.close(); //关闭工作簿
    } catch (IOException e) {
        e.printStackTrace();
    }
}

一切准备就绪之后就可以发送邮件了

发送邮件(带附件)

//创建会话
Session session = JavaMailUtil.createSession();

//创建邮件对象
MimeMessage message = new MimeMessage(session);
message.setSubject("主题");
message.setFrom(new InternetAddress("发送者邮箱"));
//发送给一个人
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("接收者邮箱"));
//发送给多个人
//message.setRecipients(MimeMessage.RecipientType.CC, new InternetAddress[] {new InternetAddress("接收者邮箱")});

//邮件主体
BodyPart textPart = new MimeBodyPart();
textPart.setContent("文本信息:来自于公司PLM系统测试", "text/html;charset=utf-8");

//邮件附件
BodyPart filePart = new MimeBodyPart();
filePart.setFileName(fileName);

//提交附件文件
filePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get(JavaMailUtil.FILEPATH + fileName)), "application/octet-stream")));

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(filePart);

//将邮件装入信封
message.setContent(multipart);
//发送
Transport.send(message);

如果有发送一些特殊需求,比如需要内嵌图片HTML

发送邮件(内嵌图片HTML)

PS: 没有试过,copy的代码,贴上去以后如果有需求了再验证

Session session = JavaMailUtils.createSession(); //创建session对象
MimeMessage message = new MimeMessage(session); //创建message对象
message.setSubject("测试邮件"); //设置邮件标题
message.setFrom(new InternetAddress("[email protected]")); //设置发送方地址
message.setRecipient(RecipientType.TO, new InternetAddress("[email protected]")); //设置接收方地址
message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("[email protected]"),new InternetAddress("[email protected]")}); //群发(抄送多人)
//正文
BodyPart textPart=new MimeBodyPart();
StringBuilder contentText=new StringBuilder();
contentText.append("<h3>网易邮箱/h3>");
contentText.append("<p>给QQ邮箱发消息了!</p>");
contentText.append("<img src=\"cid:xxx\"/>");  
textPart.setContent(contentText.toString(),"text/html;charset=utf-8");
//附件
BodyPart imagePart=new MimeBodyPart();  
imagePart.setDataHandler(new DataHandler(
    new ByteArrayDataSource(Files.readAllBytes(Paths.get("D://test//1.jpg")), "application/octet-stream"))); //
imagePart.setHeader("Content-ID", "xxx"); //图片的内容ID
Multipart multipart=new MimeMultipart(); //创建multipart对象
multipart.addBodyPart(textPart); //将textPart对象放入multipart
multipart.addBodyPart(filePart); //将filePartt对象放入multipart
message.setContent(multipart); //将multipart对象放入邮件
Transport.send(message); //发送邮件

标签:JAVA,InternetAddress,写入,excel,multipart,邮箱,new,message,邮件
From: https://www.cnblogs.com/fanwenkeer/p/18224808

相关文章

  • ### Cause: java.sql.SQLSyntaxErrorException: Expression #4 of SELECT list is not
    最近把线上数据库备份到本地数据库进行一些代码修改时候,发现代码连接本地数据库报错,线上数据库是正常的,后来查阅了一下是SELECT列表不在GROUPBY语句内且存在不函数依赖GROUPBY语句的非聚合字段,算是比较严谨的sql模式,如果需要解决的话需要修改一下my.ini配置页面,我先去自己安装......
  • Java定时任务Cron表达式
    Java学习中使用到了xxjob定时任务等,在配置的时候使用了Cron表达式来设置执行时间和频率1.表达式含义Cron表达式从左到右为6-7个字段,每个字段代表一个含义  */5****?表示每5秒执行一次 Cron一共7位,最后一位年份可以留空,一般可以写6位,第6位星期的取值范围为1-7,从星期日......
  • excel 文档根据某几列生成 sql语句
    使用CONCATENATE函数CONCATENATE函数可将最多255个文本字符串连接成一个文本字符串。连接项可以是文本、数字、单元格引用或这些项的组合函数语法CONCATENATE(text1,[text2],...)textl:必需。表示要连接的第一个文本项。text2:可选。表示其他文本项,最多为255项。项与项之......
  • Spring 项目整合 Junit 一直报 java.lang.NullPointerException空指针异常
    1.异常信息java.lang.NullPointerException:Cannotinvoke"com.yue.service.StudentService.changeInfo()"because"this.studentService"isnull2.测试代码packagecom.yue.test;importcom.yue.config.DataSourceConfig;importcom.yue.service.Stud......
  • (D卷,100分)- 约瑟夫问题(Java & JS & Python & C)
    获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。题目描述输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值m。从数列首位置开始计数,计数到m......
  • Java学习-Sentinel 1.8.4 规则持久化到Nacos
    文章目录一、前言二、快速体验1、部署sentinel2、SpringCloud中规则持久化到nacos3、sentinel控制台操作测试三、sentinel-dashboard源码修改1、`pom.xml`中添加依赖2、`application.properties`中添加nacos配置3、nacos配置新增NacosConfig新增NacosConfigUtil4、举......
  • JAVA基础_面向对象
    类和对象        面向对象(ObjectOriented)是Java的编程范式,是一种对现实世界理解和抽象的方法。其中包括类、对象(实例)、属性、方法、等概念。类:类是一个模板,是一个抽象,它描述一类对象的行为和状态。对象:是类的一个实例,是具体的,有状态和行为。 属性:对象的状态称为......
  • java调用科大讯飞离线语音合成SDK --内附完整项目
    科大讯飞语音开放平台基础环境搭建1.用户注册注册科大讯飞开放平台账号2.注册好后先创建一个自己的应用 创建完成后进入应用选择离线语音合成(普通版)可以看到我们开发需要的SDK,选择windowsMSC点击下载。3.选择你刚刚创建的应用,选择windows系统,选择离线语言合成(普通版)......
  • Java基础之JVM
    一、Java中的内存管理1、程序,无论是代码还是数据,都需要存储在内存中。JVM为Java程序提供并管理所需要的内存空间2、JVM内存分为堆(heap)、栈(stock)、方法区(method)三个区域,分别用于储存不同的数据。3、HotSpot是SunJDK和OpenJDK中所带的虚拟机(SunJDK和OpenJDK除了注释,代码实现......
  • 【Java代码调用华为云IoT MQTT】
    目录欢迎关注微信公众号:数据科学与艺术作者WX:superhe199下面是使用Java代码调用华为云IoTMQTT:importorg.eclipse.paho.client.mqttv3.*;importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;publicclassHuaweiCloudMqttExample{publi......