当前位置: 首页 > 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 "";
        }
    }
}

相关文章:

  • 在 Excel xll 自动注册操作 中使用东方仙盟软件2————仙盟创梦IDE
  • 算法打卡第三天
  • C#开发利器:SharpBoxesCore全解析
  • 49、c# 能⽤foreach 遍历访问的对象需满足什么条件?
  • Unity3D序列化机制详解
  • CMMI(能力成熟度模型集成)详解及5个级别案例
  • 平衡二叉树的判定:回溯法的深度解析与迭代法拓展
  • 台风灾害下考虑调节特性的多元资源紧急协调调度
  • vue3:十三、分类管理-表格--模糊查询搜索框
  • 腾讯位置服务重构出行行业的技术底层逻辑
  • Java SE 抽象类和接口(下)
  • 【题解-洛谷】B4240 [海淀区小学组 2025] 最短字符串
  • NIFI的处理器:ExecuteGroovyScript 2.4.0
  • C# AI(Trae工具+claude3.5-sonnet) 写前后端
  • A1-A2 英语学习系列 第五集
  • Java枚举详解
  • 抽象:C++命名作用域与函数调用
  • IO pin的transition约束从哪来?
  • 高级认知型Agent
  • dedecms织梦全局变量调用方法总结
  • 自己做网站软件/社交媒体营销策略有哪些
  • 郑州网站建设网站推广/windows优化工具
  • 厦门网站建设 软件园/关键词优化是什么意思
  • 成都设计公司网站/html网页制作代码大全
  • 发改委门户网站建设思路/优化大师官方免费
  • sae wordpress 伪静态/抖音seo运营模式