- 浏览: 46682 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (38)
- hibernate (1)
- SpringMVC (2)
- AJAX (1)
- ehchace缓存 (1)
- 邮件工具类 (1)
- InputStream (2)
- FileInputStream (1)
- 性能优化 (1)
- git (1)
- final (1)
- static (1)
- memcached (1)
- mysql (0)
- rabbitmq (1)
- JVM (3)
- JDK (1)
- springboot (1)
- JAVA虚拟机 (1)
- javascript; css (1)
- Mybatis (1)
- HashMap (1)
- zookeeper (1)
- redis (1)
- netty (2)
- java (3)
- Linux (1)
- Swagger (2)
- Tomcat (1)
- Queue (1)
- Transactional,Async (1)
- RPC (1)
最新评论
前两天写了一个发送邮件的工具类,因为之前没有写过相关的代码,所以在网上查了一些资料,然后自己花了近一个礼拜才搞出来(本人菜鸟,勿喷!!!)。期间写了一个直接调用方法(需要传多个参数,然后还要根据参数进行判断等等)的版本,功能是实现了,但是用起来总感觉比较不爽,可读性也不是挺好,所以同事给了个建议,做成链式调用的方式,调用起来也比较方便,可读性也不错,所以就在之前的版本上做了修改。虽然花了比较长的时间,但是能写出一个可读性比较好(自我感觉)的邮件接口也是感觉挺棒的。
现在把代码贴出来,有需要的朋友可以直接拷贝去用,欢迎纠错,但请勿转载!!!
调用方式
代码实现
现在把代码贴出来,有需要的朋友可以直接拷贝去用,欢迎纠错,但请勿转载!!!
调用方式
/** * senderEmail 为开始节点 是发送人的邮箱地址 参数为发件人的邮箱和密码 * to 主收件人 参数可以是String类型,也可以是List类型 必填 * cc 是抄送人,参数可以是String类型,List类型 * bcc 是秘密抄送人,参数可以是String类型,List类型 * attach 传附件,参数可以是String类型(单个附件路径),List类型(附件路径集合),Map类型(key为文件名,value为内容,value为InputSteeam) * send()是结束节点,必须添加 */ List<String> list = new ArrayList<String>(); list.add("ksjskbgshg@qq.com"); list.add(""); List<String> 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 List<String> toList = new ArrayList<String>(); //抄送人 private String cc; private List<String> ccList = new ArrayList<String>(); //秘密抄送人 private String bcc; private List<String> bccList = new ArrayList<String>(); //邮件主题 private String subject; //邮件正文 private String content; //附件路径 private List<String> attachList = new ArrayList<String>(); //单个附件路径 private String attach; //发送日期 字符串类型 private String dateStr; //发送日期 Date类型 private Date date; //存放需要发送的附件名称和流 private Map<String, InputStream> map = new HashMap<String, InputStream>(); //发送人邮箱地址 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<String> 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<String> 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<String> 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<String> 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<String> returnToEmail(Address[] inValidEmail, List<String> emailsList) throws Exception { List<String> list = new ArrayList<String>(); List<String> addreList = new ArrayList<String>(); 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<String> getNewList(List<String> li){ List<String> list = new ArrayList<String>(); for(int i=0; i<li.size(); i++){ String str = li.get(i); //获取传入集合对象的每一个元素 if(!list.contains(str)){ //查看新集合中是否有指定的元素,如果没有则加入 list.add(str); } } return list; } /** * 设置message的内容 * @param session * @param toEmail * @param ccEmails * @param bccEmail * @param subject * @param date * @return * @throws Exception */ private static Message getMailMessage(Session session, Address[] toEmail, Address[] ccEmails, Address[] bccEmail, String subject, Date date) throws Exception { MimeMessage mimeMessage = new MimeMessage(session); //设置发送人 mimeMessage.setFrom(new InternetAddress(senderEmail)); //设置主接受人 if(Is.empty(toEmail)){ throw new Exception("主收件人的邮箱地址不能为空,请设置主收件人的邮箱地址"); } mimeMessage.setRecipients(Message.RecipientType.TO, toEmail); //设置抄送人 if(!Is.empty(ccEmails)){ mimeMessage.setRecipients(Message.RecipientType.CC, ccEmails); } //设置秘密抄送人 if(!Is.empty(bccEmail)) { mimeMessage.setRecipients(Message.RecipientType.BCC, bccEmail); } //设置邮件主题 if(!Is.empty(subject)) { mimeMessage.setSubject(subject); } //设置邮件发送时间,如果传入的时间小于当前的时间,则发送时间为当前时间,否则为传入的时间 if(Is.empty(date)){ mimeMessage.setSentDate(new Date()); }else{ Date now = new Date(); if(now.getTime() > 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<String,InputStream> map, List<String> 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<String> 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; } }
评论
3 楼
IT小将
2015-12-16
Is.empty()引用的Is.js中的,就是个简单的判空,可以自己适当的改成senderEmail==null或senderEmail==''
2 楼
yujiaao
2015-12-16
static class Is {
public static boolean empty(String str) {
return StringUtils.isEmpty(str);
}
public static boolean empty(Collection<?> list) {
return CollectionUtils.isEmpty(list);
}
public static boolean empty(Address[] toEmail) {
return toEmail == null || toEmail.length<=0;
}
public static boolean empty(Date date) {
return date==null || date.before(new Date(0));
}
public static boolean empty(Map<?, ?> map) {
return MapUtils.isEmpty(map);
}
}
public static boolean empty(String str) {
return StringUtils.isEmpty(str);
}
public static boolean empty(Collection<?> list) {
return CollectionUtils.isEmpty(list);
}
public static boolean empty(Address[] toEmail) {
return toEmail == null || toEmail.length<=0;
}
public static boolean empty(Date date) {
return date==null || date.before(new Date(0));
}
public static boolean empty(Map<?, ?> map) {
return MapUtils.isEmpty(map);
}
}
1 楼
yujiaao
2015-12-16
老大,你的Is.empty能不能贴出来啊?
相关推荐
Java发送邮件工具类是Java开发中常用的一种技术,主要用于企业级应用中发送通知、验证码、报表等信息。这个工具类通常基于JavaMail API实现,它允许开发者通过编程方式发送电子邮件。下面将详细介绍Java发送邮件的...
总结来说,`java版发送邮件工具类`利用`java email`库,特别是`mail.jar`,为开发者提供了一种简便的方式来发送电子邮件。通过理解和使用`SendJMail.java`这样的工具类,你可以轻松地集成邮件发送功能到你的Java应用...
这个名为“发送邮件工具类,支持QQ邮箱”的程序库或代码模块专门设计用于帮助开发者便捷地通过QQ邮箱发送带有附件的邮件。QQ邮箱是腾讯公司提供的免费电子邮箱服务,具有稳定性强、功能丰富的特点,深受用户喜爱。...
8. **可配置性**:为了适应不同的邮件服务提供商,邮件工具类通常设计为可配置,允许开发者根据实际情况调整SMTP服务器参数。 9. **重试机制**:为了提高邮件发送的可靠性,工具类可能还包含邮件发送失败后的重试...
Java发送带模板的邮件工具类是一种实用的编程实践,它允许开发者通过自定义HTML模板来创建个性化的电子邮件。在Java中,我们可以利用`javax.mail`库来实现这个功能。这个库提供了丰富的API,用于发送、接收和处理...
发送邮件
java发送邮件工具类,用于java程序实现邮件的发送功能
### Java发送邮件工具类知识点详解 #### 一、概述 在Java开发中,发送电子邮件是一项常见且实用的功能,尤其在企业级应用中更是不可或缺的一部分。本文将详细介绍如何使用Java发送邮件,并通过一个具体的示例代码...
这个名为"发送邮件工具类.rar"的压缩包显然包含了一个Java工具类,用于简化邮件发送过程。下面,我们将深入探讨Java中如何实现邮件发送,以及相关的知识点。 首先,Java提供了JavaMail API来处理邮件发送。这个API...
在这个名为 "javaMail获取发送邮件工具类.zip" 的压缩包中,我们可能找到了一个已经封装好的 Java 类,简化了使用 JavaMail 进行邮件操作的过程。 1. **SMTP(Simple Mail Transfer Protocol)**: SMTP 用于发送...
以下是对Java发送邮件工具类及其相关jar文件的详细解释: 1. **JavaMail API介绍**: JavaMail API是Java平台上的一个标准API,它提供了与邮件服务器交互的一组接口和类。主要包含以下组件: - `javax.mail`:...
发送邮件工具类-java
Java 借助163或qq等邮箱发送邮件工具类 基础内容 不涉及图片附件等
这个工具类的创建旨在简化邮件处理的复杂性,使开发者能够便捷地集成邮件功能。以下是对JavaMail工具类及其相关知识点的详细说明: 1. **JavaMail API**: JavaMail API 是Java平台上的标准邮件接口,提供了发送、...
这个"java 发送邮件 小工具类+ mail.jar"提供了一个便捷的解决方案。它包含了一个Java类,该类封装了发送电子邮件的过程,以及一个名为`mail.jar`的库,这个库可能包含了JavaMail API,是发送邮件所必需的。 ...
JAVA邮件发送工具类(支持同步和异步发送邮件以及附件信息),支持多个抄送邮件发送。
java代码-java邮件工具类代码合集 ——学习参考资料:仅用于个人学习使用!
java邮件发送工具类java邮件发送工具类包含gmail