【背景】
最近做项目的时候,有这样一个需求,因为项目中的流程是分级流转审批的过程,所以当前人操作完成之后,需要程序的一个固定邮箱通过邮件通知下级相应人员进行处理,所以也就有了小编今天的这篇博文。
【操作步骤】
1.引入activation.jar、commons-email-1.1.jar、mail.jar这三个jar包,百度搜索下载或者单击此百度网盘链接(请单击此链接下载)
2.将共用的信息放到配置文件中(这里只附上一个图片,因为代码会将中文内容转换为其它格式)
注:下面的message1-7全部为邮件内容部分,这里为了实现定制化将公共内容放到一个地方存放,才将其拆开;下面的host内容请按照你邮箱的地址查询相关的host
3.建立mail实体类,并通过静态方法读取配置文件中的信息
- package com.gxt.common.vo; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * mail实体 * @author mk * */ public class Mail { public static final String ENCODEING = "UTF-8"; private static String host; //服务器地址 private static String sender; //发件人的邮箱 private String receiver;//收件人的邮箱 private static String name; //发件人昵称 private static String username;//账号 private static String password;//密码 private static String subject; //主题 private String message; //详情 private static String message1; //详情1 private static String message3; //详情3 private static String message5; //详情5 private static String message7; //详情7 //将下面内容放到配置文件mail.properties中,方便修改 static{ InputStream in = Mail.class.getResourceAsStream("/mail.properties"); Properties p = new Properties(); try { p.load(in); host =p.getProperty("Host"); sender =p.getProperty("sender"); name =p.getProperty("name"); username =p.getProperty("username"); password =p.getProperty("password"); subject =p.getProperty("subject"); message1 =p.getProperty("message1"); message3 =p.getProperty("message3"); message5 =p.getProperty("message5"); message7 =p.getProperty("message7"); } catch (IOException e) { e.printStackTrace(); } } public static String getHost() { return host; } public static void setHost(String host) { Mail.host = host; } public static String getSender() { return sender; } public static void setSender(String sender) { Mail.sender = sender; } public String getReceiver() { return receiver; } public void setReceiver(String receiver) { this.receiver = receiver; } public static String getName() { return name; } public static void setName(String name) { Mail.name = name; } public static String getUsername() { return username; } public static void setUsername(String username) { Mail.username = username; } public static String getPassword() { return password; } public static void setPassword(String password) { Mail.password = password; } public static String getSubject() { return subject; } public static void setSubject(String subject) { Mail.subject = subject; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public static String getMessage1() { return message1; } public static void setMessage1(String message1) { Mail.message1 = message1; } public static String getMessage3() { return message3; } public static void setMessage3(String message3) { Mail.message3 = message3; } public static String getMessage5() { return message5; } public static void setMessage5(String message5) { Mail.message5 = message5; } public static String getMessage7() { return message7; } public static void setMessage7(String message7) { Mail.message7 = message7; } } -
4.建立工具类,调用jar包中的内容实现邮件发送
- package com.gxt.common.util; import java.sql.Date; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; import com.gxt.common.vo.Mail; import com.miitgxt.common.util.ResultInfo; /** * 邮件发送工具类 * @author mk * */ public class MailUtil { //发送调用的方法 public ResultInfo send(Mail mail){ //定制化返回的内容 ResultInfo result = new ResultInfo(false,"邮件发送失败请与管理员联系"); //发送email HtmlEmail email = new HtmlEmail(); try{ //System.out.println(mail.getHost()+"---"+mail.getSender()+"---"+mail.getName()+"---"+mail.getUsername()+"---"+mail.getPassword()+"---"+mail.getSubject()); //这里是SMTP发送服务器的名字:163的如下:“smtp.163.com” email.setHostName(mail.getHost()); //字符编码集的设置 email.setCharset(Mail.ENCODEING); //收件人的邮箱 email.addTo(mail.getReceiver()); //发送人的邮箱 email.setFrom(mail.getSender(),mail.getName()); //如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码 email.setAuthentication(mail.getUsername(), mail.getPassword()); //要发送的邮件主题 email.setSubject(mail.getSubject()); //要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签 email.setMsg(mail.getMessage()); //发送 email.send(); result.setStatus(true); return result; }catch(EmailException e){ return result; } } //将邮件内容组装的方法 public ResultInfo setMail(String usermail, String message2 ,String message4){ Mail mail = new Mail(); mail.setReceiver(usermail); //接收人 //放入配置文件中的添加部分 StringBuffer message = new StringBuffer(); message.append(mail.getMessage1()); message.append(message2); message.append(mail.getMessage3()); message.append(message4); message.append(mail.getMessage5()); Date datatime = new java.sql.Date(new java.util.Date().getTime()); message.append(datatime.toString()); message.append(mail.getMessage7()); mail.setMessage(message.toString()); MailUtil mailUtil = new MailUtil(); ResultInfo isstr = mailUtil.send(mail); return isstr; } } -
5.写一个main方法进行测试
- public static void main(String[] args) throws IOException { MailUtil mailUtil = new MailUtil(); ResultInfo aaa = mailUtil.setMail("mk740474106@163.com", "收件人姓名XXX", "邮件内容"); if (aaa.isStatus()) { System.out.println("发送成功"); }else{ System.out.println("发送失败"); } } -
6.效果展示,如下图
【思路扩展】
感兴趣的朋友可以通过反编译工具去看jar中具体实现邮件发送的代码哦O(∩_∩)O~
【总结感受】
本文借鉴博客:请单击链接查看
在工作中,遇到相应的需求,然后解决它,这就是江湖,这就是江湖中的经验
在解决问题的过程中也让自己进行了大量的思考,如何让自己的代码拥有更好的复用性,如何让自己的代码更加简洁,如何让自己的代码更加高效?
另外小编还会去思考如何让自己做的功能能够更好的服务用户,可能这一点是最重要的吧,所谓得用户者得天下
收拾行囊,继续闯荡自己的一个人的江湖啦O(∩_∩)O~