当前位置: 首页 > news >正文

JAVA批量发送邮件(含excel内容)

EmailSenderHtmlV1 是读取配置文件《批量发送邮件.xlsx》,配置sheet获取 发件人邮箱    邮箱账号    口令,发送excel数据sheet获取收件人邮箱    抄送人邮箱    邮件标题    第N行开始(N>=1,N=0默认表头)    第M行结束(M>=1,M=0默认表头)    附件文件夹    附件名,同时发送excel数据内容详情sheet配合发送excel数据sheet的第N和第M行信息,获取excel内容。

EmailSenderV1是读取配置文件《批量发送邮件.xlsx》,配置sheet获取 发件人邮箱    邮箱账号    口令,发送数据sheet 获取 收件人邮箱    抄送人邮箱    邮件标题    邮件内容    附件文件夹 ,  附件名。

1.

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

public class EmailSenderHtmlV1 {
    private String smtpServer;
    private String username;
    private String password;
    private String senderEmail;
    private boolean isMany;
    private String excelFile;
    private Sheet configSheet;
    private Sheet dataSheet;
    private String beginrow;
    private String endrow;

    public EmailSenderHtmlV1(boolean many, Properties smtpConfig, String excelFile) {
        setConfig(many, smtpConfig, excelFile);
    }
    public void setConfig(boolean many, Properties smtpConfig, String excelFile) {
        try {
            this.isMany = many;
            if (many) {
                this.excelFile = excelFile;
                FileInputStream file = new FileInputStream(new File(excelFile));
                //System.out.println(file.toString());
                Workbook workbook = new XSSFWorkbook(file);
                //System.out.println(workbook.toString());
                this.configSheet = workbook.getSheet("配置");
                //System.out.println(this.configSheet.toString());
                // 从配置表读取SMTP信息
                Row row = configSheet.getRow(1); // 第二行(index=1)
                this.smtpServer = row.getCell(0).getStringCellValue();
                this.senderEmail = row.getCell(1).getStringCellValue();
                this.username = row.getCell(2).getStringCellValue();
                this.password = row.getCell(3).getStringCellValue();
                workbook.close();
                file.close();
            } else {
                this.smtpServer = smtpConfig.getProperty("smtp_server");
                this.username = smtpConfig.getProperty("username");
                this.password = smtpConfig.getProperty("password");
                this.senderEmail = smtpConfig.getProperty("sender_email");
            }
        } catch (Exception e) {
            System.out.println("邮件配置错误:" + e.getMessage());
            System.exit(1);
        }
    }
    public  void MultiSendEmail(Properties contentConfig) {
        MultiPartEmail email = new MultiPartEmail();
        //email.setTLS(true);
        //email.setSSL(true);
        //email.setDebug(true);
        email.setHostName(smtpServer);
        email.setAuthenticator(new DefaultAuthenticator(username,password));
        try {
            email.setFrom(senderEmail);//发件人
            // 设置收件人
            String receiverEmail = contentConfig.getProperty("receiver_email");
            email.addTo(receiverEmail);
            // 设置抄送人
            String copyEmail = contentConfig.getProperty("copy_email");
            if (copyEmail != null && !copyEmail.isEmpty()) {
                email.addCc(copyEmail);            
                }
            email.setCharset("UTF-8");
            email.setSubject(contentConfig.getProperty("subject"));
            email.setMsg(contentConfig.getProperty("message"));
            // 创建 HTML 内容部分
            MimeBodyPart htmlPart = new MimeBodyPart();
            String htmlContent = contentConfig.getProperty("message");
            try {
                htmlPart.setContent(htmlContent, "text/html; charset=utf-8");
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }            
            // 创建多部分内容
            MimeMultipart multipart = new MimeMultipart("mixed");
            try {
                multipart.addBodyPart(htmlPart);
            } catch (MessagingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // 添加附件
            MimeBodyPart attachmentPart = new MimeBodyPart();
            
            String attachmentPath = contentConfig.getProperty("attachment_path");
            String attachmentNames = contentConfig.getProperty("attachment_name");
            EmailAttachment attachment = new EmailAttachment();
            
            if (attachmentNames != null && !attachmentNames.isEmpty()) {
                String[] files = attachmentNames.split(",");
                for (String fileName : files) {
                    attachment.setName(fileName);
                    try {
                         FileDataSource fds = new FileDataSource(attachmentPath + File.separator + fileName);
                         attachmentPart.setDataHandler(new DataHandler(fds));
                         attachmentPart.setFileName(attachment.getName());
                         multipart.addBodyPart(attachmentPart);
                    } catch (MessagingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            // 设置完整内容
            email.setContent(multipart, "multipart/mixed");
            email.send();
            System.out.println("邮件发送成功");
        } catch (EmailException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    public void bulkSendEmail() {
        try {
            FileInputStream file = new FileInputStream(new File(excelFile));
            Workbook workbook = new XSSFWorkbook(file);
            Sheet sheet = workbook.getSheet("发送excel数据");

            // 从第二行(index=1)开始读取数据,第一行是表头
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i);
                if (row == null) continue;

                Properties contentConfig = new Properties();
                contentConfig.setProperty("receiver_email", getCellValue(row.getCell(0)));
                contentConfig.setProperty("copy_email", getCellValue(row.getCell(1)));
                contentConfig.setProperty("subject", getCellValue(row.getCell(2)));
                //contentConfig.setProperty("message", getCellValue(row.getCell(3)));
                contentConfig.setProperty("beginrow", getCellValue(row.getCell(3)));
                contentConfig.setProperty("endrow", getCellValue(row.getCell(4)));
                contentConfig.setProperty("attachment_path", getCellValue(row.getCell(5)));
                contentConfig.setProperty("attachment_name", getCellValue(row.getCell(6)));
                //getexcelcontent(getCellValue(row.getCell(3)),getCellValue(row.getCell(4)));
                ExcelToHtmlConverter eth = new ExcelToHtmlConverter(excelFile, getCellValue(row.getCell(3)),getCellValue(row.getCell(4)));
                contentConfig.setProperty("message", eth.convertExcelToHtml());

                MultiSendEmail(contentConfig);
            }
            workbook.close();
            file.close();
        } catch (IOException e) {
            System.out.println("读取Excel文件错误:" + e.getMessage());
        }
    }
    public void getexcelcontent(String beginrow,String endrow) {
        try {
            FileInputStream file = new FileInputStream(new File(excelFile));
            Workbook workbook = new XSSFWorkbook(file);
            Sheet sheet = workbook.getSheet("发送excel数据内容详情");

            // 从第二行(index=1)开始读取数据,第一行是表头
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i);
                if (row == null) continue;

               
            }
            //contentConfig.setProperty("message", getCellValue(row.getCell(3)));
            workbook.close();
            file.close();
        } catch (IOException e) {
            System.out.println("读取Excel文件错误:" + e.getMessage());
        }
    }
    private String getCellValue(Cell cell) {
        if (cell == null) return "";
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf((int) cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }
    
    public static void main(String[] args) {
        // 批量发送邮件示例
        String excelFile = "D:/SendMail/批量发送邮件.xlsx";
        
        EmailSenderHtmlV1 emailSender = new EmailSenderHtmlV1(true, null, excelFile);
        emailSender.bulkSendEmail();
        
    }
}

2.

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;


import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

public class EmailSenderV1 {
    private String smtpServer;
    private String username;
    private String password;
    private String senderEmail;
    private boolean isMany;
    private String excelFile;
    private Sheet configSheet;
    private Sheet dataSheet;

    public EmailSenderV1(boolean many, Properties smtpConfig, String excelFile) {
        setConfig(many, smtpConfig, excelFile);
    }
    public void setConfig(boolean many, Properties smtpConfig, String excelFile) {
        try {
            this.isMany = many;
            if (many) {
                this.excelFile = excelFile;
                FileInputStream file = new FileInputStream(new File(excelFile));
                //System.out.println(file.toString());
                Workbook workbook = new XSSFWorkbook(file);
                //System.out.println(workbook.toString());
                this.configSheet = workbook.getSheet("配置");
                //System.out.println(this.configSheet.toString());
                // 从配置表读取SMTP信息
                Row row = configSheet.getRow(1); // 第二行(index=1)
                this.smtpServer = row.getCell(0).getStringCellValue();
                this.senderEmail = row.getCell(1).getStringCellValue();
                this.username = row.getCell(2).getStringCellValue();
                this.password = row.getCell(3).getStringCellValue();
                workbook.close();
                file.close();
            } else {
                this.smtpServer = smtpConfig.getProperty("smtp_server");
                this.username = smtpConfig.getProperty("username");
                this.password = smtpConfig.getProperty("password");
                this.senderEmail = smtpConfig.getProperty("sender_email");
            }
        } catch (Exception e) {
            System.out.println("邮件配置错误:" + e.getMessage());
            System.exit(1);
        }
    }
    public  void MultiSendEmail(Properties contentConfig) {
        MultiPartEmail email = new MultiPartEmail();
        //email.setTLS(true);
        //email.setSSL(true);
        //email.setDebug(true);
        email.setHostName(smtpServer);
        email.setAuthenticator(new DefaultAuthenticator(username,password));
        try {
            email.setFrom(senderEmail);//发件人
            // 设置收件人
            String receiverEmail = contentConfig.getProperty("receiver_email");
            email.addTo(receiverEmail);
            // 设置抄送人
            String copyEmail = contentConfig.getProperty("copy_email");
            if (copyEmail != null && !copyEmail.isEmpty()) {
                email.addCc(copyEmail);            
                }
            email.setCharset("UTF-8");
            email.setSubject(contentConfig.getProperty("subject"));
            email.setMsg(contentConfig.getProperty("message"));
            // 添加附件
            String attachmentPath = contentConfig.getProperty("attachment_path");
            String attachmentNames = contentConfig.getProperty("attachment_name");
            EmailAttachment attachment = new EmailAttachment();
            
            if (attachmentNames != null && !attachmentNames.isEmpty()) {
                String[] files = attachmentNames.split(",");
                for (String fileName : files) {
                    attachment.setPath(attachmentPath + File.separator + fileName);
                    attachment.setName(fileName);
                    email.attach(attachment);//添加附件
                }
            }
            email.send();
            System.out.println("邮件发送成功");
        } catch (EmailException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    public void bulkSendEmail() {
        try {
            FileInputStream file = new FileInputStream(new File(excelFile));
            Workbook workbook = new XSSFWorkbook(file);
            Sheet sheet = workbook.getSheet("发送数据");

            // 从第二行(index=1)开始读取数据,第一行是表头
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i);
                if (row == null) continue;

                Properties contentConfig = new Properties();
                contentConfig.setProperty("receiver_email", getCellValue(row.getCell(0)));
                contentConfig.setProperty("copy_email", getCellValue(row.getCell(1)));
                contentConfig.setProperty("subject", getCellValue(row.getCell(2)));
                contentConfig.setProperty("message", getCellValue(row.getCell(3)));
                contentConfig.setProperty("attachment_path", getCellValue(row.getCell(4)));
                contentConfig.setProperty("attachment_name", getCellValue(row.getCell(5)));

                MultiSendEmail(contentConfig);
            }
            workbook.close();
            file.close();
        } catch (IOException e) {
            System.out.println("读取Excel文件错误:" + e.getMessage());
        }
    }

    private String getCellValue(Cell cell) {
        if (cell == null) return "";
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf((int) cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";
        }
    }
}

http://www.xdnf.cn/news/570043.html

相关文章:

  • Proteus 51单片机仿真模拟步骤详解【附有51单片机的仿真图,仿真软件】【调试专用】
  • 【VSCode】在远程服务器Linux 系统 实现 Anaconda 安装与下载
  • 职坐标编程开发进阶路径
  • 详解Redis缓存穿透、缓存雪崩、缓存击穿:原理、场景与解决方案
  • Gradle导入旧工程报错问题解决
  • java接口自动化(二) - 接口测试的用例设计
  • springAI调用deepseek模型使用硅基流动api的配置信息
  • 分布式电源的配电网无功优化
  • 汽车转向系统行业2025数据分析报告
  • 【python】纤维宽度分布分析与可视化
  • 小米汽车二期工厂下月将竣工,产能提升助力市场拓展
  • 使用 Vue 展示 Markdown 文本
  • 一个实际电路的原理图是怎样设计出来的?附带案例流程图!
  • export和import的书写方式
  • 深度学习之序列建模的核心技术:LSTM架构深度解析与优化策略
  • Devicenet主转Profinet网关助力改造焊接机器人系统智能升级
  • 【动手学深度学习】1.4~1.8 深度学习的发展及其特征
  • 视觉基础模型
  • 【Qt】QImage::Format
  • 目标检测 Sparse DETR(2022)详细解读
  • 线上 Linux 环境 MySQL 磁盘 IO 高负载深度排查与性能优化实战
  • 学编程对数学成绩没帮助?
  • 一、苍穹外卖
  • File文件
  • 大模型下载到本地
  • 深入解析Dify:从架构到应用的全面探索
  • Unity中SRP Batcher使用整理
  • plt.rcParams[“font.family“] = [“SimHei“, “WenQuanYi Micro Hei“, “Heiti TC“]
  • vue3:十三、分类管理-表格--模糊查询搜索框
  • 程序设计基础----排序(2)