最近的项目中遇到了这个问题,之前也并没有使用过JavaMail来实现邮箱验证,今天就来试一试。

需求:

当用户注册的时候,注册成功,向用户邮箱发送一个激活邮件,用户激活之后修改数据库中的状态,变为已激活。

当用户填写信息,点击注册的时候,入如果注册成功,则发送邮件。

@PostMapping(value="doRegister")
public @ResponseBody String doRegister(@Valid User user, BindingResult result) {// 检查合法性if (result.hasErrors()) {List<ObjectError> list = result.getAllErrors();for (ObjectError error : list) {System.out.println(error.getDefaultMessage());}return "注册失败 " + list.get(0).getDefaultMessage();}// 调用服务if (userService.register(user)) {return "注册成功,请激活";} else {return "注册失败,请检查您的信息";}
}

获取表单数据之后,要对表单数据进行处理,调用UserService的register方法。

@Override
public boolean register(User user) {// 获取UserString code = CodeUtils.generateUniqueCode();user.setCode(code);user.setState(0);if (userDao.existByUserName(user.getUsername())) return false;// 调用持久层保存数据,如果成功,发送一封邮件if(userDao.save(user)){new Thread(new MailUtils(user.getEmail(), code)).start();;return true;}return false;
}

如果持久层userDao调用save方法成功,则会启动一个线程,向用户邮箱发送一封邮件。

重点来了,使用JavaMail发送邮件:

public void run() {// 配置Properties prop=new Properties();// 设置邮件服务器主机名,这里是163prop.put("mail.host","smtp.163.com" );// 发送邮件协议名称prop.put("mail.transport.protocol", "smtp");// 是否认证prop.put("mail.smtp.auth", true);try {// SSL加密MailSSLSocketFactory sf = null;sf = new MailSSLSocketFactory();// 设置信任所有的主机sf.setTrustAllHosts(true);prop.put("mail.smtp.ssl.enable", "true");prop.put("mail.smtp.ssl.socketFactory", sf);// 创建会话对象Session session = Session.getDefaultInstance(prop, new Authenticator() {// 认证信息,需要提供"用户账号","授权码"public PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication("用户账号", "授权码");}});// 是否打印出debug信息session.setDebug(true);// 创建邮件Message message = new MimeMessage(session);// 邮件发送者message.setFrom(new InternetAddress("用户账号"));// 邮件接受者message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));// 邮件主题message.setSubject("激活邮件");String content = "<html><head></head><body><h1>请点击连接激活</h1><h3><a href='http://localhost:8080/active?code="+ code + "'>http://localhost:8080/active?code=" + code + "</href></h3></body></html>";message.setContent(content, "text/html;charset=UTF-8");// Transport.send(message);// 邮件发送Transport transport = session.getTransport();transport.connect();transport.sendMessage(message, message.getAllRecipients());transport.close();} catch (Exception e) {e.printStackTrace();}
}

这里需要注意的就是授权码和邮件服务器主机名的获取。我们知道,邮件发送流程如下:

一般的邮箱是不会打开smtp,需要我们手动打开。

打开163邮箱并登录:

找到设置->P0P3/SMTP/IMAP。

这里将POP3/SMTP服务器勾上,并且获取授权码即可。在下面我们可以看到SMTP服务器主机名。
将这两个信息填上去,就可以愉快的发送邮件了!!

源码:https://github.com/a60782885/JavaMail

JavaMail实现简单邮箱验证——163邮箱相关推荐

  1. Mac 邮箱客户端 163邮箱 频繁报无法验证用户名和密码

    Mac 邮箱客户端 163邮箱 频繁报无法验证用户名和密码. 由于163邮箱想用客户端收发邮件,需开通客户端授权密码提供给邮件客户端使用. 但总不定时的提示163密码异常,可是重新输入后依然提示无法验 ...

  2. ibm邮件怎么撤回_怎么申请邮箱?163邮箱如何注册使用?

    近10年,我们的生活因为互联网发生了翻天覆地的变化,人与人之间的距离变的近了,因为各类社交软件让陌生人变成了熟悉的人.而对于办公场景中,社交软件沟通,总少了几分正式性.最近又看到很多人问关于怎么申请邮 ...

  3. Foxmail:完美配置QQ邮箱、163邮箱、Google邮箱

    今天一时冲动,觉得为何不把我这几个平台上的邮箱集中起来管理呢!于是,就有了大伙所看到的下面的内容了~ 1. 配置QQ邮箱 点击"设置" –> 选择"账户" ...

  4. 怎样使用QQ邮箱代收163邮箱的邮件

    参考:网易163邮箱帮助 首先介绍一下什么是POP3,SMTP和IMAP POP3 POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到I ...

  5. 怎么申请邮箱?163邮箱如何注册使用?

    近10年,我们的生活因为互联网发生了翻天覆地的变化,人与人之间的距离变的近了,因为各类社交软件让陌生人变成了熟悉的人.而对于办公场景中,社交软件沟通,总少了几分正式性.最近又看到很多人问关于怎么申请邮 ...

  6. Python邮件发送SMATP模块详细总结(含qq邮箱及163邮箱服务开启及授权码获取,多附件发送)

    Python实现电子邮件发送 在生活中或许我们多数都在用微信或者是QQ,但是工作中就会涉及邮件了,我也是最近在工作中用到了,所以找了些资料,有的较为完备有的就特别零散,所以自己也来整理分享一下.这里主 ...

  7. Yahoo邮箱验证,Yahoo邮箱清洗 - EmailCamel免费在线批量验证邮箱有效性!

    Yahoo邮箱验证,Yahoo邮箱清洗 - EmailCamel免费在线批量验证邮箱有效性! 简单.易懂的邮箱验证报告 通过Excel.Text导入验证领取+100,快速体验 验证结果说明 立马体验, ...

  8. Apple邮箱配置QQ邮箱,163邮箱,edu邮箱,gmail邮箱,获取gmail日历

    Apple邮箱配置QQ邮箱,163邮箱,edu邮箱,gmail邮箱,获取gmail日历 基本思路可以照着这个教程来: 03 如何充分使用iOS自带的"邮件"?--iPhone宝藏A ...

  9. 163电子邮箱注册登录入口是?企业邮箱和163邮箱有什么区别?

    最近很多小伙伴问我企业邮箱和163邮箱的区别是什么?163电子邮箱注册登录入口在哪里? [TOM企业邮箱]其实单从字面就可以判断,企业邮箱就是企业将自己的域名配置后,即可拥有以企业域名为后缀的公司邮箱 ...

最新文章

  1. linux下-exec和xargs的区别
  2. The Security Learning
  3. ir指令、立即数的作用_ARM-汇编指令集(总结)
  4. Laravel源码解析之Eloquent Model
  5. Python爬虫教程之Scrapy 框架
  6. 近些年很火的Java,就业前景到底怎么样?
  7. 摩尔庄园服务器维护,《摩尔庄园》6月11日维护公告
  8. 2022年N1叉车司机考试题及N1叉车司机理论考试
  9. CSS Sprite、CSS雪碧图应用实例
  10. sin(ωt),一文和正弦函数、频域、周期的头疼说白白
  11. 连续变量的全概率和贝叶斯公式_条件概率、全概率公式与贝叶斯公式
  12. Navicat 压缩包免费下载
  13. 关于ddos你了解多少?
  14. SQLserver 报错RegCreateKeyEx() 返回了错误 5,“拒绝访问。” (.Net SqlClient Data Provider)错误号: 22002 严重性: 16 状态: 1
  15. echarts图表y轴数据设置为固定值,等间距,如何自定义echarts图表y轴数据
  16. 深度学习1:二分类问题
  17. django 内置标签与过滤器
  18. linux 杂记 怎么解决 cuda 10.1 跑 cuda8下的代码 error
  19. Python之strip()
  20. matlab三相变压器怎么设置,simulink变压器设置

热门文章

  1. office2003稿纸加载项的删除解决方法
  2. 第18届智能车竞赛中的智能视觉组比赛细节遗留的问题-短视频脚本
  3. python中的if not
  4. 线程池有哪几种状态,分别是如何发生变化的?
  5. 58同城首页腰部动态化技术选型(布局动态化)
  6. ZoomMarker 一款用于图片滚动放大拖动,且可以添加标记的jQuery插件
  7. DHT11温湿度模块驱动程序
  8. 【Python】scipy之艾里函数
  9. CRM Plugin的基本操作
  10. C语言移位操作之增删对应比特位