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 "";
}
}
}