添加发送验证邮件的方法

打开BaseModule类,先添加2个属性

  1. @Inject protected EmailService emailService;
  2. protected byte[] emailKEY = R.sg(24).next().getBytes();

打开UserProfileModule类,添加一个方法

  1. @At("/active/mail")
  2. @POST
  3. public Object activeMail(@Attr(scope=Scope.SESSION, value="me")int userId,
  4. HttpServletRequest req) {
  5. NutMap re = new NutMap();
  6. UserProfile profile = get(userId);
  7. if (Strings.isBlank(profile.getEmail())) {
  8. return re.setv("ok", false).setv("msg", "你还没有填邮箱啊!");
  9. }
  10. String token = String.format("%s,%s,%s", userId, profile.getEmail(), System.currentTimeMillis());
  11. token = Toolkit._3DES_encode(emailKEY, token.getBytes());
  12. String url = req.getRequestURL() + "?token=" + token;
  13. String html = "<div>如果无法点击,请拷贝一下链接到浏览器中打开<p/>验证链接 %s</div>";
  14. html = String.format(html, url, url);
  15. try {
  16. boolean ok = emailService.send(profile.getEmail(), "XXX 验证邮件 by Nutzbook", html);
  17. if (!ok) {
  18. return re.setv("ok", false).setv("msg", "发送失败");
  19. }
  20. } catch (Throwable e) {
  21. log.debug("发送邮件失败", e);
  22. return re.setv("ok", false).setv("msg", "发送失败");
  23. }
  24. return re.setv("ok", true);
  25. }
  • 看清楚,这个方法只接受POST请求,虽然没参数
  • 用到了EmailService发邮件哦
  • 用到了Toolkit._3DES_encode加密token
  • 注意, 因为emailKEY每次启动都是新的,所以重启Tomcat后,老的验证邮件就无效了哦. 真正用到时候,一般会存到一个文件或者数据库里面去.