现在把代码贴出来,有需要的朋友可以直接拷贝去用,欢迎纠错,但请勿转载!!!
调用方式
/** * senderEmail 为开始节点 是发送人的邮箱地址 参数为发件人的邮箱和密码 * to 主收件人 参数可以是String类型,也可以是List类型 必填 * cc 是抄送人,参数可以是String类型,List类型 * bcc 是秘密抄送人,参数可以是String类型,List类型 * attach 传附件,参数可以是String类型(单个附件路径),List类型(附件路径集合),Map类型(key为文件名,value为内容,value为InputSteeam) * send()是结束节点,必须添加 */ Listlist = new ArrayList (); list.add("[email protected]"); list.add(""); List attachList = new ArrayList<>(); attachList.add(""); EmailUtils.senderEmail("", "") .to(list) .cc(list) .bcc(list) .subject("邮件测试1") .content("Dear All,ahahahahahahahahahaa") .attach(attachList) .send();
代码实现
/** * 邮件工具类 * Created by kevensong on 15/12/10. */ public class EmailUtils { //主收件人 private String to; private ListtoList = new ArrayList (); //抄送人 private String cc; private List ccList = new ArrayList (); //秘密抄送人 private String bcc; private List bccList = new ArrayList (); //邮件主题 private String subject; //邮件正文 private String content; //附件路径 private List attachList = new ArrayList (); //单个附件路径 private String attach; //发送日期 字符串类型 private String dateStr; //发送日期 Date类型 private Date date; //存放需要发送的附件名称和流 private Map map = new HashMap (); //发送人邮箱地址 private static String senderEmail; //发送人邮箱密码 private static String senderPwd; //邮箱服务器信息 private String mailHost; private String mailAuth; /** * 起始节点 * @param to * @return */ public EmailUtils to(String to){ this.toList.add(to); return this; } public EmailUtils to(List toList){ if(this.toList.size() > 0 ){ this.toList.addAll(toList); }else{ this.toList = toList; } return this; } public static EmailUtils senderEmail(String senderEmail, String senderPwd){ return new EmailUtils(senderEmail, senderPwd); } public EmailUtils(String senderEmail, String senderPwd){ this.senderEmail = senderEmail; this.senderPwd = senderPwd; } /** * 单个抄送人 * @param cc * @return */ public EmailUtils cc(String cc){ if(cc.equals("")) return this; this.ccList.add(cc); return this; } /** * 多个抄送人 * @param ccList * @return */ public EmailUtils cc(List ccList){ if(this.ccList.size() > 0 ){ this.ccList.addAll(ccList); }else{ this.ccList = ccList; } return this; } /** * 单个秘密抄送人 * @param bcc * @return */ public EmailUtils bcc(String bcc){ if(bcc.equals("")) return this; this.bccList.add(bcc); return this; } /** * 多个秘密抄送人 * @param bccList * @return */ public EmailUtils bcc(List bccList){ if(this.bccList.size() > 0 ){ this.bccList.addAll(bccList); }else{ this.bccList = bccList; } return this; } /** * 邮件主题 * @param subject * @return */ public EmailUtils subject(String subject){ this.subject = subject; return this; } /** * 邮件正文内容 * @param content * @return */ public EmailUtils content(String content){ this.content = content; return this; } /** * 传多个附件 * @param attachList * @return */ public EmailUtils attach(List attachList){ this.attachList = attachList; return this; } /** * 传单个附件 * @param attach * @return */ public EmailUtils attach(String attach){ this.attachList.add(attach); return this; } /** * key 为文件名 value 为附件流 * @param key * @param value * @return */ public EmailUtils attach(String key, InputStream value){ map.put(key, value); return this; } /** * 设置发送日期 String类型 * @param dateStr * @return */ public EmailUtils date(String dateStr){ this.dateStr = dateStr; return this; } /** * 设置邮件发送日期 Date类型 * @param date * @return */ public EmailUtils date(Date date){ this.date = date; return this; } public EmailUtils mailHost(String mailHost){ this.mailHost = mailHost; return this; } public EmailUtils mailAuth(String mailAuth){ this.mailAuth = mailAuth; return this; } public void send() throws Exception { if(Is.empty(senderEmail)){ throw new Exception("发送人邮箱地址不能为空,请初始化发件人邮箱地址"); } if(Is.empty(senderPwd)){ throw new Exception("发送人邮箱密码不能为空,请初始化发件人邮箱密码"); } if(Is.empty(mailHost)){ mailHost = "smtp.exmail.qq.com"; } if(Is.empty(mailAuth)){ mailAuth = "true"; } Properties properties = new Properties(); properties.put("mail.smtp.host", mailHost); properties.put("mail.smtp.auth", mailAuth); Session session = Session.getDefaultInstance(properties); //设置邮件信息 Message mimeMessage = getMailMessage(session, toList==null?null:EmailListToAddress(toList), ccList==null?null:EmailListToAddress(ccList), bccList==null?null:EmailListToAddress(bccList), subject, date); Multipart multipart = new MimeMultipart(); //添加正文 if(content != null && !content.equals("")){ BodyPart contentBodyPart = new MimeBodyPart(); contentBodyPart.setContent(content, "text/html;charest=UTF-8"); multipart.addBodyPart(contentBodyPart); } //添加附件,附件内容为空,则不需要添加附件 addAttach(multipart, mimeMessage, map, attachList); Transport transport = session.getTransport("smtp"); transport.connect(mailHost, senderEmail, senderPwd); try{ transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); }catch(SendFailedException e){ //无效地址 Address[] inValidEmail = e.getInvalidAddresses(); toList = returnToEmail(inValidEmail, toList); if(Is.empty(toList)){ throw new Exception("主收件人的邮箱地址错误,请重新设置主收件人的邮箱地址"); } ccList = returnToEmail(inValidEmail, ccList); bccList = returnToEmail(inValidEmail, bccList); mimeMessage.setRecipients(Message.RecipientType.TO, EmailListToAddress(toList)); mimeMessage.setRecipients(Message.RecipientType.CC, EmailListToAddress(ccList)); mimeMessage.setRecipients(Message.RecipientType.BCC, EmailListToAddress(bccList)); transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); } transport.close(); } /** * 获取有效的邮箱地址 * @param inValidEmail 有效的邮箱地址 * @param emailsList 发送人类型 * @return * @throws Exception */ private static List returnToEmail(Address[] inValidEmail, List emailsList) throws Exception { List list = new ArrayList (); List addreList = new ArrayList (); for(Address address : inValidEmail){ addreList.add(address.toString()); } for(String email : emailsList){ if(!addreList.contains(email)){ list.add(email); } } return getNewList(list); } /** * 取出list中重复的数据 * @param li * @return */ public static List getNewList(List li){ List list = new ArrayList (); for(int i=0; i date.getTime()){ mimeMessage.setSentDate(new Date()); }else{ mimeMessage.setSentDate(date); } } return mimeMessage; } /** * 添加附件 * @param multipart * @param mimeMessage * @param map key为附件名,value为附件内容 * @param urlPath * @throws Exception */ private static void addAttach(Multipart multipart, Message mimeMessage, Map map, List urlPath) throws Exception{ if(!Is.empty(urlPath)){ for(String path : urlPath){ if(Is.empty(path))break; BodyPart bodyPart = new MimeBodyPart(); FileDataSource fileDataSource = new FileDataSource(path); bodyPart.setDataHandler(new DataHandler(fileDataSource)); bodyPart.setFileName(MimeUtility.encodeWord(fileDataSource.getName(), "utf-8", null)); multipart.addBodyPart(bodyPart); } } if(!Is.empty(map)){ for(String fileName : map.keySet()){ if(Is.empty(fileName))break; InputStream content = map.get(fileName); //根据文件名获取mimeType String mimeType = new MimetypesFileTypeMap().getContentType(fileName); BodyPart bodyPart = new MimeBodyPart(); ByteArrayDataSource byteArrayDataSource = new ByteArrayDataSource(content, mimeType); bodyPart.setDataHandler(new DataHandler(byteArrayDataSource)); //设置附件名称 if(fileName != null && !fileName.equals("")){ bodyPart.setFileName(MimeUtility.encodeWord(fileName, "utf-8", null)); } multipart.addBodyPart(bodyPart); } } mimeMessage.setContent(multipart); } /** * List类型的邮件地址转换成Address[] * @param emailList * @return * @throws AddressException */ private static InternetAddress[] EmailListToAddress (List emailList) throws AddressException { if(Is.empty(emailList)) return null; InternetAddress[] emails = new InternetAddress[emailList.size()]; int i = 0 ; for(String email : emailList){ emails[i] = new InternetAddress(email); i ++ ; } return emails; } /** * String类型的邮件地址(用“,”隔开)转换成Address[] * @param emails * @return * @throws AddressException */ private static InternetAddress[] EmailStringToAddress (String emails) throws AddressException { if(Is.empty(emails)) return null; int len = emails.split(",").length ; String[] str = emails.split(","); int i = 0 ; InternetAddress[] emailsAddre = new InternetAddress[len] ; for(String email : str){ emailsAddre[i] = new InternetAddress(email) ; i ++ ; } return emailsAddre; } }