天天看点

java 发邮件带excel附件,以流的形式发送附件,不生成excel文件

鍏徃闇€姹傦細鏍规嵁涓氬姟闇€瑕佸畾鏃跺彂閫侀偖浠讹紝骞朵笖閭欢闇€瑕佹湁excel闄勪欢锛岄檮浠跺唴瀹逛负鏌ヨ鍒扮殑鏁版嵁銆?

寮€鍙戞€濊矾锛氱敱浜庢湇鍔″櫒鐜鏈韩绌洪棿鏈夐檺锛岃€屼笖涓嶇‘瀹氱幆澧冧腑璇诲啓鏉冮檺锛岀敓鎴恊xcel鏂囦欢姣旇緝娴垂璧勬簮锛屽嚭鐜板紓甯告椂鍙兘瀵艰嚧鍒犻櫎涓存椂鏂囦欢澶辫触銆傚洜姝ょ敓鎴恊xcel鏂囦欢鏃朵笉鐢熸垚瀹為檯鏂囦欢锛岀洿鎺ヨ幏鍙栧埌excel鍐欏叆娴侊紝骞朵笖灏嗘祦鐩存帴鍐欏叆鍒伴偖浠堕檮浠朵腑銆?

鏌ヨ浜嗗緢澶氱綉涓婅祫鏂欎互鍙妀ava閭欢API锛屾渶缁堝緱浠ュ疄鐜帮紝鍒嗕韩涓嬩緵澶у鍙傝€冿紝浜掔浉瀛︿範锛?

杞浇璇锋爣鏄庡嚭澶勶細https://blog.csdn.net/yixin605691235/article/details/82429156

璇︾粏浠g爜锛歨ttps://download.csdn.net/download/yixin605691235/10648074

鏍稿績浠g爜濡備笅锛?

閰嶇疆閭鏈嶅姟鍣ㄧ鍙e強鍙戦€佷汉鎺ユ敹浜?

mail.smtp.host=smtp.exmail.qq.com
mail.smtp.port=465
[email聽protected]
mail.send.password=xxxxxx
mail.accept.address=qqqqq[email聽protected]
[email聽protected],[email聽protected]
           

鐢熸垚excel宸ュ叿绫?

package com.yx.mail;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.StringUtils;

import jxl.Workbook;
import jxl.common.Logger;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
/**
 * java excel api(jxl) 瀵煎嚭excel宸ュ叿绫? * @author Yanyanhui
 *
 */
public class JxlUtil {
    
    private static Logger logger = Logger.getLogger(JxlUtil.class);
    
    private static int MAX_SHEET_SIZE = 65530;
    
    private static String DOUBLE_FORMAT = "#.00";
    private static String INTER_FORMAT = "#";
    
    private static WritableCellFormat INTER_CELL_FORMAT = new WritableCellFormat(new NumberFormat(INTER_FORMAT));
    private static WritableCellFormat DOUBLE_CELL_FORMAT = new WritableCellFormat(new NumberFormat(DOUBLE_FORMAT));

    /**
     * 鍒楄〃杞崲鎴恊xcel瀵煎嚭
     * @param list 瑕佽浆鎹㈢殑鍒楄〃
     * @param title 杞崲鍒楄〃鐨勬爣棰?     * @param sheetName 宸ヤ綔琛ㄥ悕绉?     * @param request 璇锋眰
     * @param response 鍝嶅簲
     * @throws Exception
     */
    public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName,HttpServletRequest request,HttpServletResponse response) throws Exception{
        listToExcel(list, title, sheetName, sheetName, 0, 0, request, response);
        
    }
    
    /**
     * 鍒楄〃杞崲鎴恊xcel瀵煎嚭
     * @param list 瑕佽浆鎹㈢殑鍒楄〃
     * @param title 杞崲鍒楄〃鐨勬爣棰?     * @param sheetName 宸ヤ綔琛ㄥ悕绉?     * @param fileName excel鏂囦欢鍚嶇О
     * @param request 璇锋眰
     * @param response 鍝嶅簲
     * @throws Exception
     */
    public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,HttpServletRequest request,HttpServletResponse response) throws Exception{
        listToExcel(list, title, sheetName, fileName, 0, 0, request, response);
        
    }
    
    /**
     * 鍒楄〃杞崲鎴恊xcel瀵煎嚭
     * @param list 瑕佽浆鎹㈢殑鍒楄〃
     * @param title 杞崲鍒楄〃鐨勬爣棰?     * @param sheetName 宸ヤ綔琛ㄥ悕绉?     * @param fileName excel鏂囦欢鍚嶇О
     * @param startRow 浠庡摢琛屽紑濮嬭緭鍑?     * @param request 璇锋眰
     * @param response 鍝嶅簲
     * @throws Exception
     */
    public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,int startRow,HttpServletRequest request,HttpServletResponse response) throws Exception{
        listToExcel(list, title, sheetName, fileName, 0, startRow, request, response);
    }
    
    /**
     * 鍒楄〃杞崲鎴恊xcel瀵煎嚭
     * @param list 瑕佽浆鎹㈢殑鍒楄〃
     * @param title 杞崲鍒楄〃鐨勬爣棰?     * @param sheetName 宸ヤ綔琛ㄥ悕绉?     * @param fileName excel鏂囦欢鍚嶇О
     * @param sheetSize 宸ヤ綔琛ㄧ殑澶у皬
     * @param startRow 浠庡摢琛屽紑濮嬭緭鍑?     * @param request 璇锋眰
     * @param response 鍝嶅簲
     * @throws Exception
     */
    public static <T> void listToExcel(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,int sheetSize,int startRow,HttpServletRequest request,HttpServletResponse response) throws Exception{

        if (list == null || list.size() == 0) {
//            throw new Exception("鍒楄〃涓病鏈変换浣曟暟鎹?);
        }

        if (sheetSize > MAX_SHEET_SIZE || sheetSize < 1) {
            sheetSize = MAX_SHEET_SIZE;
        }

        try {
            
            setResp(request, response, fileName);

            OutputStream outputStream = response.getOutputStream();

            WritableWorkbook wwb = Workbook.createWorkbook(outputStream);
            int size = 0;
            
            
            // 鍥犱负2003鐨凟xcel涓€涓伐浣滆〃鏈€澶氬彲浠ユ湁65536鏉¤褰曪紝闄ゅ幓鍒楀ご鍓╀笅65530鏉?            // 鎵€浠ュ鏋滆褰曞お澶氾紝闇€瑕佹斁鍒板涓伐浣滆〃涓紝鍏跺疄灏辨槸涓垎椤电殑杩囩▼
            // 1.璁$畻涓€鍏辨湁澶氬皯涓伐浣滆〃
            double sheetNum = Math.ceil(size / new Integer(sheetSize).doubleValue());
            // 2.鍒涘缓鐩稿簲鐨勫伐浣滆〃锛屽苟鍚戝叾涓~鍏呮暟鎹?
            WritableSheet sheet = wwb.createSheet(sheetName, 0);
            fillVeticalSheet(sheet, list, title, startRow, 0);
            
//            setColumnAutoSize(sheet, 2);
            
            wwb.write();
            wwb.close();

        } catch (WriteException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
    }
    
    
    /**
     * 浠ユ祦鐨勫舰寮忓鍑篹xcel
     * @param list 瑕佽浆鎹㈢殑鍒楄〃
     * @param title 杞崲鍒楄〃鐨勬爣棰?     * @param sheetName 宸ヤ綔琛ㄥ悕绉?     * @param fileName excel鏂囦欢鍚嶇О
     * @param sheetSize 宸ヤ綔琛ㄧ殑澶у皬
     * @param startRow 浠庡摢琛屽紑濮嬭緭鍑?     * @param request 璇锋眰
     * @param response 鍝嶅簲
     * @return 
     * @throws Exception
     */
    public static <T> ByteArrayOutputStream listToExcelReturnOut(List<T> list,LinkedHashMap<String, String> title,String sheetName, String fileName,int sheetSize,int startRow,HttpServletRequest request,HttpServletResponse response) throws Exception{

        if (list == null || list.size() == 0) {
//            throw new Exception("鍒楄〃涓病鏈変换浣曟暟鎹?);
        }

        if (sheetSize > MAX_SHEET_SIZE || sheetSize < 1) {
            sheetSize = MAX_SHEET_SIZE;
        }

//        OutputStream outputStream = response.getOutputStream();
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        setResp(request, response, fileName);
        try {

            WritableWorkbook wwb = Workbook.createWorkbook(outputStream);
            int size = 0;
            
            
            // 鍥犱负2003鐨凟xcel涓€涓伐浣滆〃鏈€澶氬彲浠ユ湁65536鏉¤褰曪紝闄ゅ幓鍒楀ご鍓╀笅65530鏉?            // 鎵€浠ュ鏋滆褰曞お澶氾紝闇€瑕佹斁鍒板涓伐浣滆〃涓紝鍏跺疄灏辨槸涓垎椤电殑杩囩▼
            // 1.璁$畻涓€鍏辨湁澶氬皯涓伐浣滆〃
            double sheetNum = Math.ceil(size / new Integer(sheetSize).doubleValue());
            // 2.鍒涘缓鐩稿簲鐨勫伐浣滆〃锛屽苟鍚戝叾涓~鍏呮暟鎹?
            WritableSheet sheet = wwb.createSheet(sheetName, 0);
            fillVeticalSheet(sheet, list, title, startRow, 0);
            
//            setColumnAutoSize(sheet, 2);
            
            wwb.write();
            wwb.close();
            
            
        } catch (WriteException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }
        return outputStream;
    }
    


    
    /**
     * 濉厖绔栫洿鏂瑰悜鐨剆heet
     * @param sheet
     * @param data
     * @param title
     * @param row
     * @param col
     * @throws Exception
     */
    public static <T> void fillVeticalSheet(WritableSheet sheet, List<T> data, LinkedHashMap<String, String> title, int row,
            int col) throws Exception {
        if (null == data || null == title) {
            return;
        }

        // 瀹氫箟瀛樻斁鑻辨枃瀛楁鍚嶅拰涓枃瀛楁鍚嶇殑鏁扮粍
        String[] enFields = new String[title.size()];
        String[] cnFields = new String[title.size()];

        // 濉厖鏁扮粍
        int count = 0;
        for (Entry<String, String> entry : title.entrySet()) {
            enFields[count] = entry.getKey();
            cnFields[count] = entry.getValue();
            count++;
        }

        
        // 濉厖琛ㄥご
        for (int i = 0; i < cnFields.length; i++) {
            String cnValue=cnFields[i];
            Label label = new Label(col + i, row,cnValue);
            sheet.addCell(label);
            sheet.setColumnView(col+i, cnValue.getBytes().length);//涓€涓腑鏂囧崰2涓瓧鑺傦紝缁忚繃璋冭瘯+4鍚庢晥鏋滄瘮杈冪悊鎯?
    
        }

        // 濉厖鍐呭
        int rowNo = row + 1;
        int colNo = col;

        for (int i = 0; i < data.size(); i++) {
            
            T item = data.get(i);
            for (int j = 0; j < enFields.length; j++) {
                Object objValue = getFieldValueByNameSequence(enFields[j], item);
                
                WritableCell cell = getWritableCell(colNo+j, rowNo, objValue);
                sheet.addCell(cell);
                
                
            }

            rowNo++;
        }
    }
    
    public static WritableCell getWritableCell(int column, int row, Object object){
        if (object == null) {
            return new Label(column, row, "");
        }
        
        String tempObj = object.toString();
        
        if (object instanceof Integer) {
            if (tempObj.equals("0")) {
                return new Number(column, row, 0);
            }

            return new Number(column, row, Double.valueOf(tempObj),INTER_CELL_FORMAT);
        }
        
        
        if (object instanceof Double) {
            return new Number(column, row, Double.valueOf(tempObj),DOUBLE_CELL_FORMAT);

        }
        
        if (object instanceof BigDecimal) {
            if (tempObj.indexOf(".00") > 0) {
                tempObj = tempObj.substring(0, tempObj.indexOf("."));
                return tempObj.equals("0") ? new Number(column, row, 0)
                        : new Number(column, row, Double.valueOf(tempObj),INTER_CELL_FORMAT);
            }

            return new Number(column, row, Double.valueOf(tempObj),DOUBLE_CELL_FORMAT);
        }
        
        return new Label(column, row, tempObj);
        
    }
    
    

    /**
     * 鏍规嵁甯﹁矾寰勬垨涓嶅甫璺緞鐨勫睘鎬у悕鑾峰彇灞炴€у€?鍗虫帴鍙楃畝鍗曞睘鎬у悕锛屽userName绛夛紝鍙堟帴鍙楀甫璺緞鐨勫睘鎬у悕锛屽student.department.
     * name绛?     *
     * @param fieldNameSequence
     *            甯﹁矾寰勭殑灞炴€у悕鎴栫畝鍗曞睘鎬у悕
     * @param o
     *            瀵硅薄
     * @return 灞炴€у€?     * @throws Exception
     *             寮傚父
     */
    public static Object getFieldValueByNameSequence(String fieldNameSequence, Object o) throws Exception {

        Object value = null;

        // 灏唂ieldNameSequence杩涜鎷嗗垎
        String[] attributes = fieldNameSequence.split("\\.");
        if (attributes.length == 1) {
            value = PropertyUtils.getProperty(o, fieldNameSequence);
            
        } else {
            // 鏍规嵁灞炴€у悕鑾峰彇灞炴€у璞?            Object fieldObj = PropertyUtils.getProperty(o, attributes[0]);
        
            
            String subFieldNameSequence = fieldNameSequence.substring(fieldNameSequence.indexOf(".") + 1);
            value = getFieldValueByNameSequence(subFieldNameSequence, fieldObj);
        }
        
        if (value instanceof Date) {
            value = new SimpleDateFormat("yyyy-MM-dd").format(
                    value).toString();    
            }
        
//        if (value.toString().endsWith(".0000")) {
//            String txt =value.toString();
//            value = txt.substring(0, txt.lastIndexOf("."));
//        }
        
        return value;
    }

    /**
     * 鏍规嵁瀛楁鍚嶈幏鍙栧瓧娈?     *
     * @param fieldName
     *            瀛楁鍚?     * @param clazz
     *            鍖呭惈璇ュ瓧娈电殑绫?     * @return 瀛楁
     */
    public static Field getFieldByName(String fieldName, Class<?> clazz) {
        // 鎷垮埌鏈被鐨勬墍鏈夊瓧娈?        Field[] selfFields = clazz.getDeclaredFields();

        // 濡傛灉鏈被涓瓨鍦ㄨ瀛楁锛屽垯杩斿洖
        for (Field field : selfFields) {
            if (field.getName().equals(fieldName)) {
                return field;
            }
        }

        // 鍚﹀垯锛屾煡鐪嬬埗绫讳腑鏄惁瀛樺湪姝ゅ瓧娈碉紝濡傛灉鏈夊垯杩斿洖
        Class<?> superClazz = clazz.getSuperclass();
        if (superClazz != null && superClazz != Object.class) {
            return getFieldByName(fieldName, superClazz);
        }

        // 濡傛灉鏈被鍜岀埗绫婚兘娌℃湁锛屽垯杩斿洖绌?        return null;
    }

    
    public static <T> LinkedList<WritableCell> addCellInVertical(List<T> data, Map<String, String> dataTitle,
            Map<String, WritableCellFormat> cellFormatMap, int rowIndex, int colIndex) {
        Label label = new Label(1, 1, "涓崍");

        LinkedList<WritableCell> cells = new LinkedList<>();
        cells.add(label);
        return cells;
    }

    

    /**
     * 
     * @param fileName
     * @param request
     * @param response
     */
    private static void setResp(HttpServletRequest request, HttpServletResponse response, String fileName) {
        final String userAgent = request.getHeader("USER-AGENT");

        response.reset();
        // response.setContentType("application/vnd.ms-excel"); // 鏀规垚杈撳嚭excel鏂囦欢  
        response.setContentType("application/x-msdownload");

        try {
            String finalFileName = null;

            if (StringUtils.contains(userAgent, "MSIE")) {// IE娴忚鍣?                finalFileName = URLEncoder.encode(fileName, "UTF8");
                }

            else if (StringUtils.contains(userAgent, "Mozilla")) {// google,鐏嫄娴忚鍣?                finalFileName = new String(fileName.getBytes(), "ISO8859-1");
                }

            else {
                finalFileName = URLEncoder.encode(fileName, "UTF8");// 鍏朵粬娴忚鍣?            }

            String dataStr =  new SimpleDateFormat("yyyyMMddHHmmss").format(
                    new Date()).toString();

            // 杩欓噷璁剧疆涓€涓嬭娴忚鍣ㄥ脊鍑轰笅杞芥彁绀烘锛岃€屼笉鏄洿鎺ュ湪娴忚鍣ㄤ腑鎵撳紑
            response.setHeader("Content-Disposition", "attachment; filename=" + finalFileName+"_"+dataStr + ".xls");
        } catch (UnsupportedEncodingException e) {
        }

    }
    
    /**
     * 璁剧疆宸ヤ綔琛ㄨ嚜鍔ㄥ垪瀹藉拰棣栬鍔犵矖
     *
     * @param ws
     *            瑕佽缃牸寮忕殑宸ヤ綔琛?     * @param extraWith
     *            棰濆鐨勫搴?     */
    public static void setColumnAutoSize(WritableSheet ws, int extraWith) {
        // 鑾峰彇鏈垪鐨勬渶瀹藉崟鍏冩牸鐨勫搴?        for (int i = 0; i < ws.getColumns(); i++) {
            int colWith = 0;
            for (int j = 0; j < ws.getRows(); j++) {
                String content = ws.getCell(i, j).getContents().toString();
                int cellWith = content.length();
                if (colWith < cellWith) {
                    colWith = cellWith;
                }
            }
            // 璁剧疆鍗曞厓鏍肩殑瀹藉害涓烘渶瀹藉搴?棰濆瀹藉害
            ws.setColumnView(i, colWith + extraWith);
        }

    }
    
//    public static NumberFormat getNumFormate(Object object){
//        NumberFormat numberFormat = new NumberFormat("");
//        
//    }
    
    public static void testExport(HttpServletRequest request,HttpServletResponse response) {
        try {
            setResp(request,response,"test");

            OutputStream outputStream = response.getOutputStream();

            WritableWorkbook wwb = Workbook.createWorkbook(outputStream);
            
            WritableSheet sheet = wwb.createSheet("test", 0);

            Label label = new Label(1, 1, "涓崍");
            sheet.addCell(label);

            wwb.write();
            wwb.close();

        } catch (WriteException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
           

閭欢宸ュ叿绫?

package com.yx.mail;


import java.io.ByteArrayInputStream;
import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Part;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.util.ByteArrayDataSource;
import com.sun.mail.util.MailSSLSocketFactory;



public class BaseMail {

	/**
	 * 鍙戦€侀偖浠?	 * 
	 * @param to
	 *            閭欢鏀朵欢浜哄湴鍧€
	 * @param copyEmail
	 *            閭欢鎶勯€佸湴鍧€
	 * @param title
	 *            閭欢鏍囬
	 * @param text
	 *            鍐呭
	 * @param fileDs
	 *            闄勪欢娴?	 */
	public void sendMsgFileDs(String to, String copyEmail, String title, String text,ByteArrayInputStream inputstream) {
		Session session = assembleSession();
		Message msg=new MimeMessage(session);
		try {
			msg.setFrom(new InternetAddress(MailConfig.sendAddress));
			msg.setSubject(title);
			msg.setRecipients(RecipientType.TO, acceptAddressList(to,copyEmail));
			MimeBodyPart contentPart=(MimeBodyPart) createContent(text,inputstream);//鍙傛暟涓烘鏂囧唴瀹瑰拰闄勪欢娴?//			MimeBodyPart stream = new MimeBodyPart();
			
//			MimeBodyPart part=(MimeBodyPart) createAttachment("D:/test/1.jpg");//鍙鍔犲涓檮浠?			MimeMultipart mime=new MimeMultipart("mixed");
			mime.addBodyPart(contentPart);
//			mime.addBodyPart(part);//鍙鍔犲涓檮浠?			msg.setContent(mime);
			Transport.send(msg);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public Address[] acceptAddressList(String acceptAddress,String acceptAddressOther) {
		// 鍒涘缓閭欢鐨勬帴鏀惰€呭湴鍧€锛屽苟璁剧疆鍒伴偖浠舵秷鎭腑
		Address[] tos = null;
		String [] copyEmail= acceptAddressOther.split(",");
		try {
			if (copyEmail != null) {
				// 涓烘瘡涓偖浠舵帴鏀惰€呭垱寤轰竴涓湴鍧€
				tos = new InternetAddress[copyEmail.length + 1];
				tos[0] = new InternetAddress(acceptAddress);
				for (int i = 0; i < copyEmail.length; i++) {
					tos[i + 1] = new InternetAddress(copyEmail[i]);
				}
			} else {
				tos = new InternetAddress[1];
				tos[0] = new InternetAddress(acceptAddress);
			}
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        return tos;
	}
	
	public Session assembleSession() {
		Session session = null;
		Properties props=new Properties();
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.smtp.port", MailConfig.mailSmtpPort);
		props.setProperty("mail.smtp.host", MailConfig.mailSmtpHost);//閭欢鏈嶅姟鍣?		//寮€鍚畨鍏ㄥ崗璁?        MailSSLSocketFactory sf = null;
        try {
            sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
        } catch (GeneralSecurityException e1) {
            e1.printStackTrace();
        }
		props.put("mail.smtp.ssl.socketFactory", sf);
		props.put("mail.smtp.ssl.enable", "true");
		session = Session.getDefaultInstance(props, new MyAuthenricator(MailConfig.sendAddress,MailConfig.sendPassWord));
		return session;
	}
	
	static Part createContent(String content,ByteArrayInputStream inputstream){
		MimeBodyPart contentPart=null;
		try {
			contentPart=new MimeBodyPart();
			MimeMultipart contentMultipart=new MimeMultipart("related");
			MimeBodyPart htmlPart=new MimeBodyPart();
			htmlPart.setContent(content, "text/html;charset=gbk");
			contentMultipart.addBodyPart(htmlPart);
			//闄勪欢閮ㄥ垎
			MimeBodyPart excelBodyPart=new MimeBodyPart();
			DataSource dataSource=new ByteArrayDataSource(inputstream, "application/excel");
            DataHandler dataHandler=new DataHandler(dataSource);
            excelBodyPart.setDataHandler(dataHandler);
            excelBodyPart.setFileName(MimeUtility.encodeText("閫氱煡.xls"));
//			excelBodyPart.setDataHandler(new DataHandler(fileDs));
//			excelBodyPart.setFileName(fileDs.getName());
//			excelBodyPart.setContentID("excel");
			contentMultipart.addBodyPart(excelBodyPart);
			contentPart.setContent(contentMultipart);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return contentPart;
	}
	
	//鐢ㄦ埛鍚嶅瘑鐮侀獙璇侊紝闇€瑕佸疄鐜版娊璞$被Authenticator鐨勬娊璞℃柟娉昉asswordAuthentication
    static class MyAuthenricator extends Authenticator{  
        String u = null;  
        String p = null;  
        public MyAuthenricator(String u,String p){  
            this.u=u;  
            this.p=p;  
        }  
        @Override  
        protected PasswordAuthentication getPasswordAuthentication() {  
            return new PasswordAuthentication(u,p);  
        }  
    }
    
}
           

娴嬭瘯绫伙細

package com.yx.mail;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@Scope(value = "prototype")
public class TestMain extends BaseController{

	private Logger logger = LogManager.getLogger(TestMain.class);
	@Autowired 
	private SendEmailService sendEmailService;
	@RequestMapping(value = "/mail", method = RequestMethod.GET)
	@ResponseBody
	public String sendEmail() {
		
		List<Order> rechecklist = new ArrayList();
		Order Order1 = new Order();
		Order1.setOrderNo("1");
		Order1.setProvinceId("榛戦緳姹?);
		Order Order2 = new Order();
		Order2.setOrderNo("2");
		Order2.setProvinceId("鍚夋灄");
		Order Order3 = new Order();
		Order3.setOrderNo("3");
		Order3.setProvinceId("杈藉畞");
		Order Order4 = new Order();
		Order4.setOrderNo("4");
		Order4.setProvinceId("绂忓缓");
		rechecklist.add(Order1);rechecklist.add(Order2);rechecklist.add(Order3);rechecklist.add(Order4);
		
		
		
		LinkedHashMap<String, String> recheckMap = new LinkedHashMap<>();
		recheckMap.put("provinceId", "鐪佷唤");
		recheckMap.put("orderNo", "璁㈠崟鍙?);
		
		try {
			ByteArrayOutputStream baos = JxlUtil.listToExcelReturnOut(rechecklist, recheckMap, "test", "testexport", 0, 0, request,
					response);
			ByteArrayInputStream InputStream = new ByteArrayInputStream(baos.toByteArray());
			String email = MailConfig.acceptAddress;//鎺ユ敹浜?			String copyEmail = MailConfig.acceptAddressOther;//鎶勯€佸浜轰互閫楀彿鍒嗛殧
			String title = "XX閫氱煡";
			String context = "褰撳墠绯荤粺瀛樺湪"+rechecklist.size()+"鏉¢渶瑕佸鐞嗙殑璁㈠崟銆傝鎯呰鐣欐剰闄勪欢銆?;
			sendEmailService.sendMsgFileDs(email,copyEmail,title,context,InputStream);
//			file.deleteOnExit();
		} catch (Exception e) {
			logger.info(e.getMessage());
			logger.info("銆怣ailNoticeController銆憇endEmail 寮傚父");
		}
		
		return null;
	}
}