Java发送邮件
来源:互联网 发布:windows 无法引导 编辑:程序博客网 时间:2024/06/16 21:03
常见的邮件协议包括:
SMTP:简单邮件传输协议,用于发送电子邮件的传输协议。
POP3:用于接收电子邮件的标准协议。
IMAP:互联网消息访问协议,是POP3的替代协议。
这三种协议都有对应的SSL加密传输的协议,分别是SMTPS、POP3S和IMAPS。
除了JavaMail的核心包之外,JavaMail还需要JAF(JavaBeans
Activation Framework)来处理不是纯文本的邮件内容。这包括MIME(多用途互联网邮件扩展)、URL页面和文件附件等内容。
JavaMail的关键对象
1.Properties
2.Session
会话对象, 是一堆配置信息的集合。
3.Transport和Store:传输和存储。
应用实例
1.引入jar包
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version></dependency>
package com.xiets.javamaildemo;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.util.Date;import java.util.Properties;/** * JavaMail 版本: 1.6.0 * JDK 版本: JDK 1.7 以上(必须) */public class Main { // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码) // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”), // 对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。 public static String myEmailAccount = "xxxxxxxxx@163.com"; public static String myEmailPassword = "xxxxxxxxx"; // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com public static String myEmailSMTPHost = "smtp.163.com"; // 收件人邮箱(替换为自己知道的有效邮箱) public static String receiveMailAccount = "xxxxxxxxx@qq.com"; public static void main(String[] args) throws Exception { // 1. 创建参数配置, 用于连接邮件服务器的参数配置 Properties props = new Properties(); // 参数配置 props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) props.setProperty("mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址 props.setProperty("mail.smtp.auth", "true"); // 需要请求认证 // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启), // 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误, // 打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。 /* // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接, // 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助, // QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看) final String smtpPort = "465"; props.setProperty("mail.smtp.port", smtpPort); props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.socketFactory.port", smtpPort); */ // 2. 根据配置创建会话对象, 用于和邮件服务器交互 Session session = Session.getInstance(props); session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log // 3. 创建一封邮件 MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount); // 4. 根据 Session 获取邮件传输对象 Transport transport = session.getTransport(); // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错 // // PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log, // 仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误 // 类型到对应邮件服务器的帮助网站上查看具体失败原因。 // // PS_02: 连接失败的原因通常为以下几点, 仔细检查代码: // (1) 邮箱没有开启 SMTP 服务; // (2) 邮箱密码错误, 例如某些邮箱开启了独立密码; // (3) 邮箱服务器要求必须要使用 SSL 安全连接; // (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务; // (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。 // // PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。 transport.connect(myEmailAccount, myEmailPassword); // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); // 7. 关闭连接 transport.close(); } /** * 创建一封只包含文本的简单邮件 * * @param session 和服务器交互的会话 * @param sendMail 发件人邮箱 * @param receiveMail 收件人邮箱 * @return * @throws Exception */ public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception { // 1. 创建一封邮件 MimeMessage message = new MimeMessage(session); // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称) message.setFrom(new InternetAddress(sendMail, "某宝网", "UTF-8")); // 3. To: 收件人(可以增加多个收件人、抄送、密送) message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8")); // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题) message.setSubject("打折钜惠", "UTF-8"); // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容) message.setContent("XX用户你好, 今天全场5折, 快来抢购, 错过今天再等一年。。。", "text/html;charset=UTF-8"); // 6. 设置发件时间 message.setSentDate(new Date()); // 7. 保存设置 message.saveChanges(); return message; }}
发送带附件的邮件
package com.hd.javamail;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Session;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 com.sun.mail.util.MimeUtil;/** * * @author H__D * @date 2016年12月6日 下午7:38:33 * */public class Demo3 { /** * 生成一份本地的邮件 * @param args * @throws MessagingException * @throws IOException */ public static void main(String[] args) throws MessagingException, IOException { //环境 Session session = Session.getDefaultInstance(new Properties()); //邮件 MimeMessage msg = new MimeMessage(session); //设置主题 msg.setSubject("test123456"); //发件人,注意中文的处理 msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText( "某某") + "\"<xxxxxx@163.com>")); //设置邮件回复人 msg.setReplyTo(new Address[]{new InternetAddress("123456@163.com")}); //整封邮件的MINE消息体 MimeMultipart msgMultipart = new MimeMultipart("mixed");//混合的组合关系 //设置邮件的MINE消息体 msg.setContent(msgMultipart); //附件1 MimeBodyPart attch1 = new MimeBodyPart(); //附件2 MimeBodyPart attch2 = new MimeBodyPart(); //正文内容 MimeBodyPart content = new MimeBodyPart(); //把内容,附件1,附件2加入到 MINE消息体中 msgMultipart.addBodyPart(attch1); msgMultipart.addBodyPart(attch2); msgMultipart.addBodyPart(content); //把文件,添加到附件1中 //数据源 DataSource ds1 = new FileDataSource(new File("C:/Users/H__D/Desktop/1.txt")); //数据处理器 DataHandler dh1 = new DataHandler(ds1 ); //设置第一个附件的数据 attch1.setDataHandler(dh1); //设置第一个附件的文件名 attch1.setFileName("file1.jpg"); //把文件,添加到附件2中 DataSource ds2 = new FileDataSource(new File("C:/Users/H__D/Desktop/2.txt")); DataHandler dh2 = new DataHandler(ds2 ); attch2.setDataHandler(dh2); attch2.setFileName(MimeUtility.encodeText( "文件2.jpg")); //正文(图片和文字部分) MimeMultipart bodyMultipart = new MimeMultipart("related"); //设置内容为正文 content.setContent(bodyMultipart); //html代码部分 MimeBodyPart htmlPart = new MimeBodyPart(); //html中嵌套的图片部分 MimeBodyPart imgPart = new MimeBodyPart(); //正文添加图片和html代码 bodyMultipart.addBodyPart(htmlPart); bodyMultipart.addBodyPart(imgPart); //把文件,添加到图片中 DataSource imgds = new FileDataSource(new File("C:/Users/H__D/Desktop/logo.png")); DataHandler imgdh = new DataHandler(imgds ); imgPart.setDataHandler(imgdh); //说明html中的img标签的src,引用的是此图片 imgPart.setHeader("Content-Location", "http://sunteam.cc/logo.jsg"); //html代码 htmlPart.setContent("<span style='color:red'>中文呵呵</span><img src=\"http://sunteam.cc/logo.jsg\">","text/html;charset=utf-8"); //生成文件邮件 msg.saveChanges(); //输出 OutputStream os = new FileOutputStream("C:/Users/H__D/Desktop/demo.eml"); msg.writeTo(os); os.close(); } }
附件为excel
public void sendAttachByTemplate(File file, TBaseMailset from, String toEmail,String attachname) { String subject = "薪酬通知邮件"; try { getMailSession().setDebug(true); Message msg = new MimeMessage(getMailSession()); //发件人 if(from!=null&&!"".equals(from.getMail())){ msg.setFrom(new InternetAddress(from.getMail()));//邮箱地址 }else{ msg.setFrom(new InternetAddress("lantuo103@163.com"));//邮箱地址 } //收件人 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail)); //设置主题 msg.setSubject(subject); //发送时间 msg.setSentDate(new java.util.Date()); // 添加附件 Multipart mm = new MimeMultipart(); BodyPart mdp = new MimeBodyPart(); ///E:/JavaWorkspace/rs/WebRoot/WEB-INF/classes/xlsresult/ygxc.xls //File file = new File(this.getClass().getResource("/").getPath()+"xlsresult/ygxc.xls"); FileDataSource fds = new FileDataSource(file); DataHandler dh = new DataHandler(fds); //mdp.setFileName("salary.xls");//设置后缀为xls的名字后就可以发送excel附件了 //mdp.setFileName(attachname);//设置后缀为xls的名字后就可以发送excel附件了 mdp.setFileName(MimeUtility.encodeWord(attachname));//设置后缀为xls的名字后就可以发送excel附件了 //mdp.setFileName(URLEncoder.encode(attachname, "UTF-8")); mdp.setDataHandler(dh); mm.addBodyPart(mdp); msg.setContent(mm); Transport transport = mailSession.getTransport("smtp"); //transport.connect("smtp.163.com", "lantuo103@163.com", "lantuo"); if(from!=null){ //如果没有设置发送邮箱 transport.connect(from.getServerHost(), from.getMail(), from.getMailPassword()); }else{ transport.connect("smtp.163.com", "lwww@163.com", "lwww"); } transport.sendMessage(msg, msg.getAllRecipients()); } catch (Exception ex) { ex.printStackTrace(); } }
要一个临时系统功能可以查询数据结果生成excel文件,在指定时间把excel文件发送个多个人,并抄送给多个人。 技术要点:Java使用poi生成excel文件通过javamail邮件发送给多个人;数据库mysql 代码有部分删减剪!!只能参考修改,不能直接使用!!==================================相关jar==================================<!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.10-FINAL</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10-FINAL</version></dependency><!-- BEGIN: Java mail --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>${javamail.version}</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- END: Java mail -->================================== 相关数据表================================== CREATE TABLE `mail_set` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `code` varchar(100) NOT NULL COMMENT '唯一主键', `from_address` varchar(100) DEFAULT NULL COMMENT '发送邮箱', `from_address_pwd` varchar(100) DEFAULT NULL COMMENT '发送邮箱密码', `smtp` varchar(100) DEFAULT NULL COMMENT '简单邮件传输协议', `debug` int(1) DEFAULT '0' COMMENT 'debug模式 0 开启 1 关闭', `auth` int(1) DEFAULT '0' COMMENT '需要身份验证 0需要 1 不需要', `host` varchar(100) DEFAULT NULL COMMENT '发送邮件的服务Ip', `port` varchar(100) DEFAULT NULL COMMENT '端口', `copyto` varchar(2000) DEFAULT NULL COMMENT '发件抄送人邮箱 cc@qq.com;dd@qq.com', `remark` varchar(255) DEFAULT NULL, `create_time` datetime DEFAULT NULL COMMENT '创建时间', `creater` bigint(20) DEFAULT NULL, `modifier` bigint(20) DEFAULT NULL, `modify_time` datetime DEFAULT NULL, `version` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COMMENT='发件邮箱账号设置'; CREATE TABLE `send_bi_mail` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `city_id` bigint(20) DEFAULT NULL COMMENT '城市id', `city_name` varchar(100) DEFAULT NULL COMMENT '城市', `user_name` varchar(100) DEFAULT NULL COMMENT '业管人员姓名', `email` varchar(100) DEFAULT NULL COMMENT '业管人员邮箱', `bi_type` bigint(20) DEFAULT '1' COMMENT '1,收款明细,2其他', `tos` varchar(2000) DEFAULT NULL COMMENT '群发邮箱aa@qq.com;bb@qq.com', `remark` varchar(255) DEFAULT NULL, `create_time` datetime DEFAULT NULL COMMENT '创建时间', `creater` bigint(20) DEFAULT NULL, `modifier` bigint(20) DEFAULT NULL, `modify_time` datetime DEFAULT NULL, `version` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8 COMMENT='报表邮件收件人';==================================java代码==================================import java.io.Serializable;/** * 邮箱账号信息 */public class MailSetEntity extends SsAuditAuto { // 唯一主键 private String code; // 发送邮箱 private String fromAddress; // 发送邮箱密码 private String fromAddressPwd; // 简单邮件传输协议 private String smtp; // debug模式 private Long debug; // 发送邮件的服务Ip private String host; // 端口 private String port; // 需要身份验证 private Long auth; // 抄送人 private String copyto;}////////////////////////////////////////////////////////////////////////////////////////////////import java.io.Serializable;/** * 邮件发送信息 */public class MailInfoEntity implements Serializable { private static final long serialVersionUID = 1L; // 收件人 private String[] tos; // 抄送人 private String[] copyto; // 附件地址 private String fileAddress; // 附件名称 private String fileName; // 主题 private String subject; // 正文 private String context;}////////////////////////////////////////////////////////////////////////////////////////////////import org.apache.commons.lang.StringUtils;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.hssf.util.HSSFColor;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.io.*;import java.text.SimpleDateFormat;import java.util.*;import java.sql.SQLException;import java.io.IOException;import java.io.OutputStream;/** * bi报表邮件定时发送 */@Service("sendBiMailService")public class SendBiMailServiceImpl implements SendBiMailService { private Logger logger = LoggerFactory.getLogger(getClass()); // 报表临时文件目录 public static final String BI_TMP_FILES = SendBiMailServiceImpl.class.getResource("/").getPath() + "bitmpfiles/"; // 发送邮箱账号 public static final String MAIL_BI_CODE = "MAIL_BI_CODE"; @Autowired private SendBiMailDao sendBiMailDao; @Autowired private SendBiMailUserDao sendBiMailUserDao; @Autowired private MailSetDao mailSetDao; @Override public void sendMail() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); Date time = cal.getTime(); String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(time); String date = DateTools.formatDateTime(new Date(), DateTools.YYYY_MM_DD); String dateTableName = DateTools.formatDateTime(new Date(), DateTools.YYYYMMDD); // 邮箱账号信息 MailSetEntity mailSet = mailSetDao.queryByKey(MAIL_BI_CODE); if (mailSet != null) { SendBiMailUserEntity city = sendBiMailUserDao.queryCity(条件查询); // 先删除昨天的文件 String yesterDayFileName = city.getCityName() + yesterday + "收款明细.xls"; String yesterDayFileFullPath = BI_TMP_FILES + yesterDayFileName; DeleteFileUtil.deleteFile(yesterDayFileFullPath); // 创建当日文件 String fileName = city.getCityName() + date + "收款明细.xls"; String fileFullPath = BI_TMP_FILES + fileName; // 数据库查询数据结果集 List<SendBiMailEntity> sendBiMailEntityList = sendBiMailDao.queryList(条件查询); if (sendBiMailEntityList.size() > 0) { // 生成excel文件 createExcel(city, fileFullPath, sendBiMailEntityList); // 设置邮件发送信息 MailInfoEntity mailInfo = new MailInfoEntity(); mailInfo.setSubject(city.getCityName() + date + "销售报表明细"); mailInfo.setFileAddress(fileFullPath); mailInfo.setFileName(fileName); mailInfo.setContext(city.getCityName() + date + " 销售报表明细,请查收。\n -- BI报表系统"); // 发送邮件给城市业管人员 sendEmail(mailSet, mailInfo, city); } else { logger.info(city.getCityName() + " 当日没有收款明细,邮件不发送"); } } else { logger.info("没有找到发送邮箱账号:" + MAIL_BI_CODE); } } /** * 发送邮件给城市业管人员 * * @param city 城市信息 */ public void sendEmail(MailSetEntity mailSet, MailInfoEntity mailInfo, SendBiMailUserEntity city) { // 发送邮件 try { // 设置收件人 if (StringUtils.isNotBlank(city.Tos())) { String[] tos = city.getTos.split(";"); mailInfo.setTos(tos); } // 设置抄送人 if (StringUtils.isNotBlank(mailSet.getCopyto())) { String[] copyto = mailSet.getCopyto().split(";"); mailInfo.setCopyto(copyto); } SendMailUtil.send(mailSet, mailInfo); logger.info("发送成功 >>>>" + city.getCityName() + " 的销售报表收款明细给:" + toStr.toString()); } catch (Exception e) { e.printStackTrace(); logger.info(city.getCityName() + " 的销售报表收款明细发送邮件失败"); } } /** * 创建Excel * * @param city 城市信息 * @param fileFullPath 文件路径 * @param sendBiMailEntityList 数据内容 */ public void createExcel(SendBiMailUserEntity city, String fileFullPath, List<SendBiMailEntity> sendBiMailEntityList) { OutputStream out = null; try { //out = new FileOutputStream(new File("E:\\北京2017-03-20收款明细.xls")); out = new FileOutputStream(new File(fileFullPath)); write(out, sendBiMailEntityList); logger.info("生成" + city.getCityName() + "销售报表收款明细EXCEL 成功"); } catch (FileNotFoundException e) { e.printStackTrace(); logger.info("生成" + city.getCityName() + "销售报表收款明细EXCEL 失败"); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 生成Excel文件的方法write * * @param outputStream * @throws SQLException */ public void write(OutputStream outputStream, List<SendBiMailEntity> list) { // 初始一个workbook HSSFWorkbook workbook = new HSSFWorkbook(); // 创建单个sheet HSSFSheet sheet = workbook.createSheet("sheet0"); // 创建第一行,设置列名 HSSFRow row0 = sheet.createRow(0); row0.setHeight((short) 400); // 设置行高 HSSFCell cell = null; // Excel的列 HSSFFont font = workbook.createFont(); // 设置字体 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 粗体显示 font.setColor(HSSFFont.COLOR_NORMAL); // 设置单元格字体的颜色 HSSFCellStyle style = workbook.createCellStyle(); // 样式 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 设置边框样式 style.setBorderTop(HSSFCellStyle.BORDER_THIN); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置边框颜色 style.setTopBorderColor(HSSFColor.BLACK.index); style.setBottomBorderColor(HSSFColor.BLACK.index); style.setLeftBorderColor(HSSFColor.BLACK.index); style.setRightBorderColor(HSSFColor.BLACK.index); // 设置文本格式 HSSFDataFormat format = workbook.createDataFormat(); style.setDataFormat(format.getFormat("@")); StringBuffer tableHeaderStr = new StringBuffer("客户姓名;手机号;收款时间;pos单号;收款金额;收据号;项目编号;项目名称;城市编号;城市名称"); String[] tableHeader = tableHeaderStr.toString().split(";"); short cellNumber = (short) tableHeader.length; // 表的列数 for (int k = 0; k < cellNumber; k++) { int i = 0; i += k; short b = 5000; cell = row0.createCell(i); // 创建第0行第k列 cell.setCellValue(tableHeader[k]); // 设置第0行第k列的值 sheet.setColumnWidth(i, b); // 设置列的宽度 style.setFont(font); // 设置字体风格 cell.setCellStyle(style); } HSSFCellStyle styleContext = workbook.createCellStyle(); styleContext.setWrapText(true); styleContext.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 设置边框样式 styleContext.setBorderTop(HSSFCellStyle.BORDER_THIN); styleContext.setBorderBottom(HSSFCellStyle.BORDER_THIN); styleContext.setBorderLeft(HSSFCellStyle.BORDER_THIN); styleContext.setBorderRight(HSSFCellStyle.BORDER_THIN); // 设置边框颜色 styleContext.setTopBorderColor(HSSFColor.BLACK.index); styleContext.setBottomBorderColor(HSSFColor.BLACK.index); styleContext.setLeftBorderColor(HSSFColor.BLACK.index); styleContext.setRightBorderColor(HSSFColor.BLACK.index); // 设置文本格式 styleContext.setDataFormat(format.getFormat("@")); if (list.size() > 0) { // 创建剩余行 for (int rowIndex = 1; rowIndex <= list.size(); rowIndex++) { HSSFRow row = sheet.createRow(rowIndex); SendBiMailEntity entity = list.get(rowIndex - 1); // 创建多列 for (int cellIndex = 0; cellIndex < 10; cellIndex++) { cell = row.createCell(cellIndex); cell.setCellStyle(styleContext); // 设置风格 switch (cellIndex) { case 0: cell.setCellValue(entity.getClientName()); break; case 1: cell.setCellValue(entity.getClientPhone()); break; case 2: cell.setCellValue(entity.getCreateTime()); break; case 3: cell.setCellValue(entity.getPoseNo()); break; case 4: cell.setCellValue(entity.getInvoiceAmount()); break; case 5: cell.setCellValue(entity.getReceiptNo()); break; case 6: cell.setCellValue(entity.getProjectId()); break; case 7: cell.setCellValue(entity.getProjectName()); break; case 8: cell.setCellValue(entity.getCityId()); break; case 9: cell.setCellValue(entity.getCityName()); break; } } } } else { HSSFRow row = sheet.createRow(1); cell = row.createCell(0); cell.setCellValue("没有收款明细"); } try { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } }}////////////////////////////////////////////////////////////////////////////////////////////////import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.*;/** * 通过JavaMail发送邮件 */public class SendMailUtil { /* * 发送邮件到指定邮箱 * 收件人,抄送人 ,附件地址,附件名称 */ public static void send(MailSetEntity mailSet, MailInfoEntity mailInfo) throws Exception { // 1.创建Session,包含邮件服务器网络连接信息 Properties props = new Properties(); // 指定邮件的传输协议,smtp;同时通过验证 props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.auth", mailSet.getAuth()); Session session = Session.getDefaultInstance(props); // 开启调试模式 session.setDebug(mailSet.getDebug()); // 2.编辑邮件内容 Message message = new MimeMessage(session); // 设置邮件消息头 message.setFrom(new InternetAddress(mailSet.getFromAddress())); // 创建邮件接收者地址 String[] tos = mailInfo.getTos(); if (tos != null && tos.length != 0) { InternetAddress[] to = new InternetAddress[tos.length]; // 设置邮件消息的发送者 for (int i = 0; i < tos.length; i++) { to[i] = new InternetAddress(tos[i]); } message.setRecipients(Message.RecipientType.TO, to); } // 设置邮件抄送者地址 String[] copyto = mailInfo.getCopyto(); if (copyto != null && copyto.length != 0) { InternetAddress[] toCC = new InternetAddress[copyto.length]; // 设置邮件消息的发送者 for (int i = 0; i < copyto.length; i++) { toCC[i] = new InternetAddress(copyto[i]); } message.addRecipients(Message.RecipientType.CC, toCC); } // 设置主题 message.setSubject(mailInfo.getSubject()); // 设置邮件消息内容、包含附件 Multipart msgPart = new MimeMultipart(); message.setContent(msgPart); MimeBodyPart body = new MimeBodyPart(); // 正文 MimeBodyPart attach = new MimeBodyPart(); // 附件 msgPart.addBodyPart(body); msgPart.addBodyPart(attach); // 设置正文内容 body.setContent(mailInfo.getContext(), "text/html;charset=utf-8"); // 设置附件内容 attach.setDataHandler(new DataHandler(new FileDataSource(mailInfo.getFileAddress()))); attach.setFileName((MimeUtility.encodeText(mailInfo.getFileName()))); message.saveChanges(); // 3.发送邮件 Transport trans = session.getTransport(); trans.connect(mailSet.getSmtp(), mailSet.getFromAddress(), mailSet.getFromAddressPwd()); trans.sendMessage(message, message.getAllRecipients()); }}////////////////////////////////////////////////////////////////////////////////////////////////import java.io.File;/** * 删除文件和目录 */public class DeleteFileUtil { /** * 删除文件,可以是文件或文件夹 * * @param fileName 要删除的文件名 * @return 删除成功返回true,否则返回false */ public static boolean delete(String fileName) { File file = new File(fileName); if (!file.exists()) { System.out.println("删除文件失败:" + fileName + "不存在!"); return false; } else { if (file.isFile()) return deleteFile(fileName); else return deleteDirectory(fileName); } } /** * 删除单个文件 * * @param fileName 要删除的文件的文件名 * @return 单个文件删除成功返回true,否则返回false */ public static boolean deleteFile(String fileName) { File file = new File(fileName); // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除 if (file.exists() && file.isFile()) { if (file.delete()) { System.out.println("删除单个文件" + fileName + "成功!"); return true; } else { System.out.println("删除单个文件" + fileName + "失败!"); return false; } } else { System.out.println("删除单个文件失败:" + fileName + "不存在!"); return false; } } /** * 删除目录及目录下的文件 * * @param dir 要删除的目录的文件路径 * @return 目录删除成功返回true,否则返回false */ public static boolean deleteDirectory(String dir) { // 如果dir不以文件分隔符结尾,自动添加文件分隔符 if (!dir.endsWith(File.separator)) dir = dir + File.separator; File dirFile = new File(dir); // 如果dir对应的文件不存在,或者不是一个目录,则退出 if ((!dirFile.exists()) || (!dirFile.isDirectory())) { System.out.println("删除目录失败:" + dir + "不存在!"); return false; } boolean flag = true; // 删除文件夹中的所有文件包括子目录 File[] files = dirFile.listFiles(); for (int i = 0; i < files.length; i++) { // 删除子文件 if (files[i].isFile()) { flag = DeleteFileUtil.deleteFile(files[i].getAbsolutePath()); if (!flag) break; } // 删除子目录 else if (files[i].isDirectory()) { flag = DeleteFileUtil.deleteDirectory(files[i] .getAbsolutePath()); if (!flag) break; } } if (!flag) { System.out.println("删除目录失败!"); return false; } // 删除当前目录 if (dirFile.delete()) { System.out.println("删除目录" + dir + "成功!"); return true; } else { return false; } }}
文件换行
问题描述: 发送文本邮件用\n,\r,\r\n都实现不了换行。解决方案:在创建Message对象的时候。用setContent(Object o,String s);方法设置了内容格式s,如果是text/html;charset=UTF-8换行符就是<br>.
阅读全文
0 0
- [java]Java发送邮件
- java 邮件发送 --- 简单的邮件发送
- JAVA发送邮件及springboot发送邮件
- 用java发送邮件
- 用Java发送邮件
- java发送邮件源码
- java发送邮件
- Java发送邮件
- Java发送邮件程序
- java发送Email邮件
- 怎样用java发送邮件
- 利用java发送邮件
- java 邮件发送
- java邮件发送
- java邮件发送
- java定时发送邮件
- java发送邮件代码
- Java Mail 发送邮件
- 岛屿周长问题(python3实现)
- 产品经理的七个阶段
- C++操作符的优先级 及其记忆方法
- C/C++之回调函数
- Kubernetes dashboard1.8.0 WebUI安装与配置
- Java发送邮件
- js判断数组里是否有重复元素的方法
- 关于C语言的简单介绍
- 手动安装eclipse插件--扩展安装
- 相机抖动效果
- Android 必知必会
- jQuery Raty星级评分插件使用方法
- ViewPager+Fragment+侧拉
- Python之路【第十四篇】jQuery、AngularJS