汕尾海湾 发表于 2024-5-31 15:59:37

JAVA 数据写入excel并发送邮件

写这个的时候PLM系统还没有开辟好,开辟这个系统的外包团队每次开会都会被骂,感觉他们快顶不住了,估计完成不了了,烂尾之后应该会有许多需求扔给我。新领导上任之后说这边能不能发邮件,先熟悉一下怎么发邮件吧,这个功能大概率给我来做了
流程:
​    先导包 => 邮箱开启配置 => java写好配置类 => 测试发送 => 数据写入excel => 邮件带附件发送
邮箱jar包

<dependencies>
    <dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
    </dependency>
</dependencies>邮箱开启配置

我这个是163的,开启之后会生成授权码,记得复制粘贴到本身的项目配置文件里面去
https://img2024.cnblogs.com/blog/1751701/202405/1751701-20240531162921988-1055691815.png
邮箱配置类

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
<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("xxxxxx@163.com")); //设置发送方地址
message.setRecipient(RecipientType.TO, new InternetAddress("xxxxxx@qq.com")); //设置接收方地址
message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("xxxxxx@qq.com"),new InternetAddress("xxxxxx@qq.com")}); //群发(抄送多人)
//正文
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); //发送邮件
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: JAVA 数据写入excel并发送邮件