您的位置:首页 > 编程语言 > Java开发

Java读取excel工资单发送邮件

2016-02-04 11:07 597 查看
帮蕊姐姐完成一个任务,给几百号人发邮件,索性把以前写过的Javamail和读excel的代码调通了。下面简单记录一下。

Java发送邮件

MyAuthenticator.java

 attachFileNames;

    /**   
      * 获得邮件会话属性   
      */
    public Properties getProperties() {
        Properties p = new Properties();
        p.put("mail.smtp.host", this.mailServerHost);
        p.put("mail.smtp.port", this.mailServerPort);
        p.put("mail.smtp.auth", validate ? "true" : "false");
        return p;
    }

    public boolean isValidate() {
        return validate;
    }

    //省略getter setter
}


SimpleMailSender.javapackage com.umgsai.mail;

import java.util.Date;    
import java.util.Properties;   
import javax.mail.Address;    
import javax.mail.Authenticator;
import javax.mail.BodyPart;    
import javax.mail.Message;    
import javax.mail.MessagingException;    
import javax.mail.Multipart;    
import javax.mail.Session;    
import javax.mail.Transport;    
import javax.mail.internet.InternetAddress;    
import javax.mail.internet.MimeBodyPart;    
import javax.mail.internet.MimeMessage;    
import javax.mail.internet.MimeMultipart;   

public class SimpleMailSender {
    /**   
     * 以文本格式发送邮件   
     * @param mailInfo 待发送的邮件的信息   
     */
    public boolean sendTextMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证    
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        if (mailInfo.isValidate()) {
            // 如果需要身份认证,则创建一个密码验证器    
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
        //Session.ge
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根据session创建一个邮件消息    
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址    
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者    
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址,并设置到邮件消息中    
            Address to = new InternetAddress(mailInfo.getToAddress());
            mailMessage.setRecipient(Message.RecipientType.TO, to);
            // 设置邮件消息的主题    
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间    
            mailMessage.setSentDate(new Date());
            // 设置邮件消息的主要内容    
            String mailContent = mailInfo.getContent();
            mailMessage.setText(mailContent);
            // 发送邮件    
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }

    /**   
      * 以HTML格式发送邮件   
      * @param mailInfo 待发送的邮件信息   
      */
    public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证    
        MyAuthenticator authenticator = null;
       
        Properties pro = mailInfo.getProperties();
        //如果需要身份认证,则创建一个密码验证器     
        if (mailInfo.isValidate()) {
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
//        Session.getInstance(pro, authenticator)
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根据session创建一个邮件消息    
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址    
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者    
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址,并设置到邮件消息中    
            Address to = new InternetAddress(mailInfo.getToAddress());
            // Message.RecipientType.TO属性表示接收者的类型为TO    
            mailMessage.setRecipient(Message.RecipientType.TO, to);
            // 设置邮件消息的主题    
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间    
            mailMessage.setSentDate(new Date());
            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象    
            Multipart mainPart = new MimeMultipart();
            // 创建一个包含HTML内容的MimeBodyPart    
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容    
            html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
            mainPart.addBodyPart(html);
            // 将MiniMultipart对象设置为邮件内容    
            mailMessage.setContent(mainPart);
            // 发送邮件    
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
}

测试主类 Main.javapackage com.umgsai.mail;

import java.io.IOException;
import java.util.List;

import com.zappinfo.test.XlsMain;

public class Main {

    public static void main(String[] args) {
        //这个类主要是设置邮件   
        MailSenderInfo mailInfo = new MailSenderInfo();
        mailInfo.setMailServerHost("smtp.163.com");
        mailInfo.setMailServerPort("25");
        mailInfo.setValidate(true);
        //设置发送邮箱和接收邮箱
        mailInfo.setUserName("***@163.com");
        mailInfo.setPassword("***");//您的邮箱密码    
        mailInfo.setFromAddress("***@163.com");
//        mailInfo.setToAddress("***@qq.com");
        mailInfo.setToAddress("***");
        mailInfo.setSubject("测试标题");
        mailInfo.setContent("设置邮箱内容 测试");
        //这个类主要来发送邮件   
        SimpleMailSender sms = new SimpleMailSender();
        /*
         * 
        sms.sendTextMail(mailInfo);//发送文体格式    
        sms.sendHtmlMail(mailInfo);//发送html格式   
         */
        //下面为读取excel数据然后发送
        XlsMain xlsMain = new XlsMain();
        try {
            List<String []> list = xlsMain.readXls();
            String [] title0 = list.get(0);
            String [] title1 = list.get(1);
            for(int i = 2; i < 24; i++){
                
                String [] s = list.get(i);
                StringBuilder sb = new StringBuilder();
                for(int j = 0; j < 20; j++){
                    if(j == 0){
                        continue;
                    }
                    if(!title0[j].equals("0.0")){
                        sb.append("<br/>----" + title0[j] + "----<br/>]

2.Java读取excelimport java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
//参考 http://www.cnblogs.com/hongten/archive/2012/02/22/java2poi.html
public class XlsMain {

    public static void main(String[] args) {
        XlsMain xlsMain = new XlsMain();
        try {
            List<String []> list = xlsMain.readXls();
//            System.err.println(list);
            System.err.println("--------------------------");
            int k = 0;
            for (Iterator iterator = list.iterator(); iterator.hasNext();) {
                String[] strings = (String[]) iterator.next();
                for (int i = 0; i < strings.length; i++) {
                    if(strings[i] != null){
                        System.err.print(strings[i] + "  ");
                    }
                }
                System.out.print("\n");
                k++;
                if(k == 3){
                    break;
                }
            }
            System.err.println("--------------------------");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public String getValue(HSSFCell hssfCell) {
        if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
            // 返回布尔类型的值
            return String.valueOf(hssfCell.getBooleanCellValue());
        } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
            // 返回数值类型的值
            return String.valueOf(hssfCell.getNumericCellValue());
        } else {
            // 返回字符串类型的值
            return String.valueOf(hssfCell.getStringCellValue());
        }
    }
    
    public String getValue(Cell cell) {
        DecimalFormat    df   = new DecimalFormat("######0.00");   
        if (cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {
            // 返回布尔类型的值
            return String.valueOf(cell.getBooleanCellValue());
        } else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {
            // 返回数值类型的值
//            return String.valueOf(cell.getNumericCellValue());
            return String.valueOf(df.format(cell.getNumericCellValue()));
        } else if(cell.getCellType() == cell.CELL_TYPE_BLANK){
            return "0.0";
        }else if(cell.getCellType() == cell.CELL_TYPE_ERROR){
            return "0";
        }else if(cell.getCellType() == cell.CELL_TYPE_FORMULA){
//            return "";
//            return String.valueOf(cell.getNumericCellValue());
            return String.valueOf(df.format(cell.getNumericCellValue()));
        }else{
            // 返回字符串类型的值
            return String.valueOf(cell.getStringCellValue());
        }
    }
    
    public List<String []> readXls() throws IOException {
        InputStream is = new FileInputStream("D:/AliDrive/我的文档/总公司6月工资工资单.xls");
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
        XlsDto xlsDto = null;
        List<String []> list = new ArrayList<String []>();
        // 循环工作表Sheet
        for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
            
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }
            // 循环行Row
            for (int rowNum = 0; rowNum < hssfSheet.getLastRowNum(); rowNum++) {
                String[] str = new String[1000];
                System.err.print(rowNum + "\t");
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow == null) {
                    continue;
                }
                // 循环列Cell
                Iterator<Cell> cellIterator = hssfRow.cellIterator();
                int k = 0;
                while (cellIterator.hasNext()) {
                    Cell cell = (Cell) cellIterator.next();
                    System.out.print(getValue(cell)+"\t\t");
                    str[k++] = getValue(cell);
                }
                System.out.print("\n");
                
                list.add(str);
            }
        }
        return list;
    }

}

读取xlsx格式的excel存在问题,暂未深入研究。

暂未考虑性能优化,大神请略过~~

PS:源码在蕊姐姐邮箱

本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1680959
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: