我們平時註冊一些平臺賬戶的時候經常會有使用郵箱激活驗證或者短信驗證碼驗證才能註冊成功,這兩個功能都是調用郵箱或者運營商提供的接口來完成響應的驗證功能,只不過運營商需要收費這裏就演示一下通過發送郵箱激活驗證的郵件來完成一個註冊功能
1. 首先需要使用郵箱的接口需要導入郵箱的jar包,這裏直接在pom.xml中依賴:
<!-- 郵件工具包 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- 編碼工具包 -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
2. 還需要在spring.xml也就是applicationContext.xml中配置定郵箱格式等等:
<context:component-scan base-package="com.hxzy.service" />
<!-- 郵箱的工具類,定義郵箱格式,發送郵箱賬號,授權碼,編碼格式,對應mail.properties中 -->
<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.host}" />
<property name="username" value="${mail.username}" />
<property name="password" value="${mail.password}" />
<property name="defaultEncoding" value="${mail.defaultEncoding}" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
</bean>
上面引用的值放在properties文件中,方便管理和修改:
mail.host=smtp.qq.com
[email protected] 這裏是要往外發送郵件的賬號
mail.password=lntgrvwxnueaiabj
mail.defaultEncoding=utf-8
3. 用戶信息在controller接收到之後,在serviceimpl中實現往數據庫新增操作,這裏是直接調用的通用mapper的sql語句執行的新增
@Service
public class UserServiceImp extends BaseServiceImpl<User> implements UserService {
//spring整合的用來發送郵件的工具類
@Autowired
JavaMailSender sender;
@Autowired
UserMapper usermapper;
@Override
public void register(User user) {
//用來生成郵箱中的激活驗證碼,隨機生成
String activecode = UUID.randomUUID().toString();
//激活狀態默認爲0,郵箱驗證激活之後把0改成1
user.setActivationState(0);
super.save(user);//添加操作
//新增成功後開始發送郵件
MimeMessage msg = sender.createMimeMessage();
MimeMessageHelper msghelp = new MimeMessageHelper(msg);
try {
msghelp.setFrom("[email protected]");
msghelp.setTo(user.getEmail());
msghelp.setSubject("激活驗證");
String content = "<div style='width:300px;height:300px;background-color:gray;margin:0px auto;'>";
content +="<h1>歡迎您註冊知乎網</h1>";
content +="<p>請點擊以下鏈接進行激活</p>";
//根據這裏的請求網址接收提交的參數並根據參數修改數據庫中的激活狀態
content +="<p><a href='http://localhost:8081/user/active?activationCode="+activecode+"&id="+user.getId()+"'>點擊激活</a></p>";
content +="</div>";
msghelp.setText(content, true);
//發送郵件
sender.send(msg);
} catch (MessagingException e) {
e.printStackTrace();
}
}
4.根據上面代碼中點擊的連接所發出的請求以及攜帶的參數更改數據庫中的激活狀態完成註冊:
controller
//判斷註冊時是否激活成功修改狀態值
@RequestMapping("active")
public String active(User user){
if(us.updateByIdAndCode(user)>0){
return "redirect:/login.jsp#activateSuccess";
}
return "login";
}
最終執行的是dao層的mapper
<mapper namespace="com.hxzy.mapper.UserMapper">
<update id="updateByIdAndCode">
update user set activation_state = 1 where user_id = #{id} and activation_code = #{activationCode}
</update>
</mapper>