先引入maven依赖
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.5</version> </dependency>
/** *发送邮箱验证码 * @param request * @param emailNo * @return */ @RequestMapping("sendEmailCode") @ResponseBody public ResultDTO sendEmailCode(HttpServletRequest request,String emailNo,String userName){ ResultDTO resultDTO = new ResultDTO(); if (StringUtils.isBlank(emailNo)||StringUtils.isBlank(userName)){ resultDTO.setMessage("参数非法"); resultDTO.setCode(1); }else{ //随机生成验证码 String code = CommonUtils.randomGenerateCode(); logger.info("验证码:" + code + ",email:" + emailNo+",用户名:"+userName); //邮件内容 本地图片地址我获取的路径只到项目名那 所以先拼接 要是有更好的方法请告诉我 String realPath = request.getSession().getServletContext().getRealPath("logo.png").split("logo.png")[0] +"WEB-ROOT/views/"+"logo.png"; String htmlEmailContent = "<body><div style='width:918px;margin:0 auto;background-color:#fff;padding:15px 26px;'>" + "<h2><img src='"+realPath+"'></h2>" + "<div style='padding:19px 0 19px 0;border-top:2px solid #f5f5f5;border-bottom:1px solid #f5f5f5'>" + "<p style='letter-spacing: 1px;'>亲爱的<span>"+userName+"</span>,您好</p>" + "<p style='letter-spacing: 1px;'>你的验证码:</p><div>" + "<p style='text-align:center;'><span style='height:36px;line-height: 36px;background-color:#e7e6eb;color:#ffa10b;letter-spacing: 1px;padding:0 8px;font-size:31px;display: inline-block;margin-right:10px;border-radius:4px;'>" + code+"</span><i style='letter-spacing: 1px;font-style:normal;'>(10分钟内有效)</i></p></div>" + "<p style='letter-spacing: 1px;'>如非本人操作,请忽略此邮件。</p>" + "<p style='letter-spacing: 1px;'>这只是一封公告邮件,我们并不监控或回答对此邮件的回复。</p></div>" + "<p style='text-align:center;letter-spacing: 1px;'>如有疑问请联系我们:4001150505</p></div>" + "</body>"; ImageHtmlEmail email = new ImageHtmlEmail();//用ImageHtmlEmail来发送 email.setDebug(true);//可以看到执行过程的debug信息 email.setCharset("UTF-8");//防止乱码 email.setSSLCheckServerIdentity(true); email.setSslSmtpPort("465"); // 设定SSL端口 try { //解析本地图片和网络图片都有的html文件重点就是下面这两行; //ImageHtmlEmail通过setDataSourceResolver来识别并嵌入图片 //查看DataSourceResolver的继承结构发现有几个好用的子类 用哪个传放哪个就行 DataSourceResolver[] dataSourceResolvers = new DataSourceResolver[]{new DataSourceFileResolver()};//添加DataSourceUrlResolver用于解析网络图片,注意:new URL("http://") //DataSourceCompositeResolver类可以加入多个DataSourceResolver, //把需要的DataSourceResolver放到一个数组里传进去就可以了; email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers)); email.setHostName("smtp.163.com"); email.addTo(emailNo, "you"); email.setFrom("javawuxuenan@163.com", "me"); email.setAuthenticator(new DefaultAuthenticator("javawuxuenan@163.com", "123456")); email.setSubject("测试邮件"); email.setHtmlMsg(htmlEmailContent); email.setTextMsg("你的邮箱客户端不支持HTML格式邮件"); email.send(); resultDTO.setData(code); resultDTO.setMessage("发送验证码成功"); resultDTO.setCode(0); } catch (EmailException e) { logger.error(e.getMessage()); resultDTO.setMessage("系统异常"); resultDTO.setCode(1); } } return resultDTO; }