SpringBoot进阶邮件服务(实战模拟邮箱注册含源码)

分析

工作中难免会用到邮箱服务,这里整理了五种邮件发送模式:发送文本邮件,发送HTML邮件,发送附件邮件,发送内联资源邮件,发送模板邮件。以供大家学习参考。最后实战部分模拟邮箱注册含源码。

看一下图(有图有真相)

提前准备

pom.xml 配置

<!– 添加spring-boot-starter-mail包引用 –> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> </dependencies>

application.properties中添加邮箱配置

#邮箱服务器地址 spring.mail.protocol=smtp spring.mail.host=smtp.qq.com #邮箱服务器地址 spring.mail.username=************@qq.com #邮箱密码 spring.mail.password=*********** spring.mail.default-encoding=UTF-8 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true

注意:若是QQ spring.mail.password=QQ授权码,需要开启QQ授权码

发送简单文本邮件

@RunWith(SpringRunner.class) @SpringBootTest public class EmailTests { @Autowired private JavaMailSender javaMailSender; @Autowired private TemplateEngine templateEngine; //读取配置文件中的参数 @Value(“${spring.mail.username}”) private String sender; private static final String recipient = “*************@163.com” ; /** * 发送简单文本邮件 */ @Test public void sendSimpleEmail() { SimpleMailMessage message = new SimpleMailMessage(); // 发送者 message.setFrom(sender); // 接收者 message.setTo(recipient); //邮件主题 message.setSubject(“主题:文本邮件”); // 邮件内容 message.setText(“骚扰邮件勿回”); javaMailSender.send(message); } }

发送HTML邮件

新增发送HTML邮件测试方法

/** * 发送Html邮件 */ @Test public void sendHtmlEmail() { MimeMessage message = javaMailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(recipient); helper.setSubject(“主题:HTML邮件”); StringBuffer sb = new StringBuffer(); sb.append(“<h1>大标题-h1</h1>”) .append(“<p style=\\\’color:#F00\\\’>红色字</p>”) .append(“<p style=\\\’text-align:right\\\’>右对齐</p>”); helper.setText(sb.toString(), true); } catch (MessagingException e) { throw new RuntimeException(“Messaging Exception !”, e); } javaMailSender.send(message); }

发送内联资源邮件

新增发送内联资源邮件测试方法

/** * 发送内联资源邮件 */ @Test public void sendInlineResourceMail() { MimeMessage message = javaMailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(recipient); helper.setSubject(“主题:这是有图片的邮件”); String imgId = “avatar”; String content=”<html><body>宫崎骏电影图片:<img src=\\\’cid:” imgId “\\\’ ></body></html>”; helper.setText(content, true) ; FileSystemResource res = new FileSystemResource(new File(“src/main/resources/static/images/avatar.jpg”)); helper.addInline(imgId, res); } catch (MessagingException e) { throw new RuntimeException(“Messaging Exception !”, e); } javaMailSender.send(message); }

发送模板邮件 重点

pom中导入thymeleaf的包

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>

新增模板emailTemplate.html

<!DOCTYPE html> <html lang=”zh” xmlns:th=”http://www.thymeleaf.org”> <head> <meta charset=”UTF-8″/> <title>Javazhan验证邮件</title> </head> <body> 您好,这是验证邮件,请点击下面的链接完成验证, <a href=”#” th:href=”@{ http://www.javazhan.com/user/activation/{id}(id=${id}) }”>激活账号</a>。 </body> </html>

新增发送模板邮件测试方法

/** * 发送模板邮件 */ @Test public void sendTemplateMail() { MimeMessage message = javaMailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(recipient); helper.setSubject(“主题:模板邮件”); Context context = new Context(); context.setVariable(“id”, “wenter”); String emailContent = templateEngine.process(“emailTemplate”, context); helper.setText(emailContent, true); } catch (MessagingException e) { throw new RuntimeException(“Messaging Exception !”, e); } javaMailSender.send(message); }

注:很多时候邮采用异步的方式来发送邮件,加快主交易执行速度,在实际项目中可以采用MQ发送邮件相关参数,监听到消息队列之后启动发送邮件。

实战部分模拟邮箱注册
很多网站都支持邮箱注册,以下将实现邮箱注册
功能:支持登录,注册,激活,重置密码。

效果如图

注册成功

未激活登录

激活邮件 去激活

激活后,登录成功

重置密码

重置密码邮件

输入之前的密码登陆

输入重置密码登陆

错误邮箱提示

代码

引入架包,修改pom.xml

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>RELEASE</version> </dependency> <!– 模板引擎 –> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!– https://mvnrepository.com/artifact/com.google.code.gson/gson –> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version>

新建实体类User.java与RequestData.java
略了(看代码)

导入静态资源
css/js/….

编写js

$(“#js-btn”).click(function() { var data = {} ; var name = $(“#js-btn”).attr(\\\’class\\\’) ; var url = “” ; if(name.indexOf(“rtn”)>0) { data.userEmail = $(“#js-field__email”).val() ; data.userPass = $(“#js-field__pass”).val() ; url = “/user/login” ; } else if(name.indexOf(“new”)>0) { data.userEmail = $(“#js-field__email”).val() ; data.userPass = $(“#js-field__pass”).val() ; data.userRepass = $(“#js-field__r-pass”).val() ; url = “/user/register” ; } else if(name.indexOf(“rst”)>0) { data.userEmail = $(“#js-field__email”).val() ; url = “/user/forget” ; } submit(data, url) ; }); function submit(data,url) { $.ajax({ cache: !1, type: “POST”, url: url, data: data, async: !0, beforeSend: function () { $(“#js-btn”).html(“提交中…”), $(“#js-btn”).attr(“disabled”, “disabled”) }, success: function (data) { var result = jQuery.parseJSON(data); layer.alert(result.message); }, complete: function () { $(“#js-btn”).html(“success”), $(“#js-btn”).removeAttr(“disabled”) } }) }

编写controler

/** * Created by yando on 2017/11/22. */ @RestController @RequestMapping(value = “user”) public class UserController { @Autowired private JavaMailSender javaMailSender; @Autowired private TemplateEngine templateEngine; @Value(“${spring.mail.username}”) private String sender; private RequestData requestData = new RequestData() ; public static Map<String, User> map = new HashMap<String, User>(); @RequestMapping(value = “login”, method = RequestMethod.POST) public String login(User user) { for(User u : map.values()) { if(u!=null && u.getUserPass().equals(user.getUserPass()) && u.getUserEmail().equals(user.getUserEmail())) { if(u.getState()==0) { requestData.setCode(“9999”); requestData.setState(“500”); requestData.setMessage(“请前往” user.getUserEmail() “邮箱激活”); return new Gson().toJson(requestData); } requestData.setMessage(“登录成功”); return new Gson().toJson(requestData); } } requestData.setCode(“9999”); requestData.setState(“500”); requestData.setMessage(“邮箱或者密码错误”); return new Gson().toJson(requestData); } @RequestMapping(value = “register”, method = RequestMethod.POST) public String register(User user) { map.put(user.getUserId(), user); // 发送注册邮件 sendTemplateMail(user.getUserEmail(), user.getUserId()); requestData.setMessage(“注册成功, 快去激活”); return new Gson().toJson(requestData); } @RequestMapping(value = “forget”, method = RequestMethod.POST) public String forget(User user) { for(User u : map.values()) { if(u!=null || u.getUserEmail()== user.getUserEmail()) { u.setUserPass(“6666”); map.remove(u.getUserId()); map.put(u.getUserId(), u); requestData.setMessage(“密码已经重置,快去查看你的邮箱”); sendSimpleEmail(u.getUserEmail(), “您好,您密码已重置,初始密码:6666,为了你的安全请尽快修改密码。”); return new Gson().toJson(requestData); } } requestData.setCode(“9999”); requestData.setState(“500”); requestData.setMessage(“无效邮箱”); return new Gson().toJson(requestData); } @RequestMapping(value = “activation/{userId}”, method = RequestMethod.GET) public void activation(@PathVariable String userId, HttpServletResponse response) throws IOException { User user = map.get(userId); if(user!=null) { user.setState(1); map.remove(user.getUserId()); map.put(user.getUserId(), user); } response.sendRedirect(“../../login.html”); } public void sendSimpleEmail(String recipient,String text) { SimpleMailMessage message = new SimpleMailMessage(); // 发送者 message.setFrom(sender); // 接收者 message.setTo(recipient); //邮件主题 message.setSubject(“Java资源分享网密码重置邮件”); // 邮件内容 message.setText(text); javaMailSender.send(message); } public void sendTemplateMail(String recipient,String userId) { MimeMessage message = javaMailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(sender); helper.setTo(recipient); helper.setSubject(“Java资源分享网验证邮件”); Context context = new Context(); context.setVariable(“id”, userId); String emailContent = templateEngine.process(“emailTemplate”, context); helper.setText(emailContent, true); } catch (MessagingException e) { throw new RuntimeException(“Messaging Exception !”, e); } javaMailSender.send(message); } }

结束了

执行RunApplication.java,看效果吧。

请测试邮件用自己的 不要给博主造成不必要的影响 谢谢

源码下载

SpringBoot进阶邮件服务(实战模拟邮箱注册含源码)

 

如果,你对上面的内容还有疑问,推荐选择西部数码企业云邮箱!有专人协助您解答邮箱疑问。

西部数码21年老牌服务商,企业邮箱功能丰富,支持层级子文件夹,邮件归档,邮件撤回,企业网盘,日程微信通知、多彩便签等几十项特色功能,使用管理便捷。按需自由定制,购买灵活,PCIe加速、极速收发!而且支持小程序收发邮件,随时随地移动办公。价格实惠,还可以免费试用!

高性价比企业邮箱开通链接:https://www.west.cn/services/mail/

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » SpringBoot进阶邮件服务(实战模拟邮箱注册含源码)

登录

找回密码

注册