网易邮箱大师smtp账号验证失败_Java发送邮件验证码,javax.mail实战简易教程

745205e2e3d7492310db63a5cca71cc3.png

最近维护的游戏项目遇到了一些安全方面的问题,后台的账号密码被海外黑客破解登录,造成了一些损失。
一般的GMT后台登录我们都只是简单的做一层校验,就是账号密码验证,只要账号密码验证通过,基本就能进后台进行操作。当然基于安全处理,所有的基于后台的请求都会带上token,这个token就是后台登录的时候返回给前端的一个校验码。
不知道是由于账密太简单还是什么其他原因,反正证实了确实被人非法在其他IP登录了后台,所以急需提升登录安全性校验
常见的安全校验是通过手机短信,就是通过发送手机验证码来进行双重校验。但是由于这只是一个小范围内部使用的后台,出于成本考虑,我决定选用邮件来发送验证码,以达到同样的双重校验目的。
Ok,言归正传,下面就是简单的一个入门教程,教大家如何使用Java发送邮件验证码,来完成一整套完整的校验流程。
第一步,按照惯例给出maven配置,我采用的是javax.mail库1.4.7版本。这已经是比较新的一个版本,目前最新的是1.5.0-b01,个人建议学习可以用新版本,如果是项目急需的最好选用老的成熟的稳定版本。

<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>

下面我就以126邮箱为例,进行一个流程讲解。首先申请一个126邮箱,这一步完成后就可以开始写代码了。
首先,我们写一个对外的发邮件方法。

private val props = Properties() private val auth = MyAuthenticator() init { //设置邮件服务器地址,连接超时时限等信息 props["mail.smtp.host"] = "http://smtp.126.com" props["mail.smtp.auth"] = "true" props["mail.smtp.connectiontimeout"] = "10000" props["mail.smtp.timeout"] = "25000" } /** * 邮件发送 * * @param receiver * @param subject * @param content */ fun send(receiver: String, subject: String, content: String) { if (receiver == "") { return } //创建缺省的session对象 val session = Session.getDefaultInstance(props, auth) //创建message对象 val msg = MimeMessage(session) //设置发件人和收件人 try { // 设置发件人 val internetAddress = InternetAddress("xxxxxx@126.com") internetAddress.personal = "SAO2 GAME" msg.setFrom(internetAddress) // 设置收件人 val addressTo = InternetAddress(receiver) msg.setRecipient(Message.RecipientType.TO, addressTo) //设置邮件主题 msg.subject = subject msg.setText(content) // 设置传输协议 val transport = session.getTransport("smtp") transport.connect("http://smtp.126.com", "xxxxxxx@126.com", "password") transport.sendMessage(msg, msg.allRecipients) transport.close() } catch (e: Exception) { e.printStackTrace() } } class MyAuthenticator: Authenticator() { override fun getPasswordAuthentication(): PasswordAuthentication { return PasswordAuthentication("xxxxxx", "auth_key") } }

所有的源码都在上面,我简单讲一下几个参数配置。
首先是这部分邮箱服务器的基本信息,包括使用的协议和超时时间等,这些都可以根据自己的实际开发要求设置。

48ee38dda1742e8d06fe715b048cb924.png


参数配置

其次是,大家可以看到一个MyAuthenticator,这个auth其实是最新的邮箱校验码,它的配置方式如图:

0a770706490154984123511b634cd3a4.png


授权验证

这个xxxxxx是你自己的邮箱地址不含@后面部分,后面的auth_key要特别注意,这个不是你的邮箱密码,而是要登陆邮箱后去申请第一个校验码。在邮箱设置里,找到协议设置。

38d087eff0175708fe8260dff6604ce0.png


image.png

c873270bd662dc3c93de90baa75931f2.png


image.png

然后点击开启,打开对应的服务,根据提示,你会得到一个校验码。校验码只会显示一次,如果忘记了,你也可以在下面重新申请。

21938ca94082e09e136aebdfa2e8cbb2.png


新增授权码

Ok,如上就基本完成了邮件发送的所有准备工作。

接下来就是实现发送邮件校验码了,首先新增一个对外接口,叫用户校验user_verify,用户点击获取校验码后就会发送该接口到服务器,服务器就会根据收到的账号找到用户,并根据用户的邮件地址发送一个全局校验码,同时服务器会临时存储这个校验码,比如建一个map,映射到用户身上。

75448f871511424f6df617f5a60a525b.png


获取验证码

在用户点击登录的时候,就会同时校验密码和验证码的准确性,只要一方出现错误就不允许登录。同时登录成功后就会删除老的验证码,这样用户使用同一个验证码重复登录是无效的。

这样,一个简单的邮件验证码校验机制就完成了,由于邮箱与用户账号深度绑定,除非黑客破解数据库,才有更改邮箱的权限,否则他收不到校验码,一般就很难通过破解账密登陆了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值