通过邮箱点击激活码进行帐号验证

在servlet 中写的方法

 

/**
  * 发送激活邮件
  * @param recipients
  * @param subject
  * @param html
  * @return
  */
 public static boolean sendMail(String recipients(收件人), String subject(主题), String html(内容)) {
  try {
   // 1.创建配置信息类
   Properties props = new Properties();
   props.put("mail.smtp.port", 25);
   props.put("mail.smtp.auth", "true");
   props.put("mail.smtp.host", "smtp.163.com");
   
   // 2.创建连接
   Session session = Session.getDefaultInstance(props, null);
   session.setDebug(false); // 是否调试,true为启用调试,会在控制台打印调试信息,改为false不启用
   Transport transport = session.getTransport("smtp");
   transport.connect("smtp.163.com", "发件箱", "密码"); 
   
   //3.设置邮件信息
   MimeMessage msg = new MimeMessage(session);
    // 主题
    msg.setSubject(subject);
    // 时间
    msg.setSentDate(new Date());
    // 发件人
    msg.setFrom(new InternetAddress("发件箱"));
    
    // 收件人
    msg.setRecipients(Message.RecipientType.TO, recipients);
    
    msg.setContent(html, "text/html;charset=UTF-8"); // html字符格式
    
    msg.saveChanges();
    
   
   transport.sendMessage(msg, msg.getAllRecipients());
   
   
   // 4.关闭Transport连接
   transport.close();
   return true;
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }
 }

 

 

/**
   * 注册新用户
   * @param req
   * @param resp
   * @throws ServletException
   * @throws IOException
   */
 public void zhuce(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  req.setCharacterEncoding("utf-8");
  String code=(String) req.getSession().getAttribute("code");
  String getcode=req.getParameter("yanzhengma");
  String name=req.getParameter("name");
  String pwd=req.getParameter("pwd");
  String email=req.getParameter("email");
  User user=new User();
  if(getcode.equalsIgnoreCase(code)){
   user.setUname(name);
   user.setPwd(jiami(pwd) );
   user.setEmail(email);
   //激活码,获取一个十位的激活码
   String jihuoma="";
   String str="abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLLMNOPQRSTUVWXYZ0123456789";
   for(int i=1;i<=10;i++){
    int a=(int) Math.floor(Math.random()*(str.length()-1-0+1));
    jihuoma+=str.charAt(a);
   }
   user.setJihuoma(jihuoma);
   user.setStatu(1);
   
   int rst=us.addUser(user);
   if(rst!=0){
   String title="论坛帐号激活验证";
   String jihuo="请点击以下链接进行激活:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您解答SpringBoot注册登录及邮箱发送账号激活代码。以下是一个简单的示例: 首先,您需要编写用户实体类。可以包含id、用户名、电子邮件和密码等字段。 ```java @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotBlank @Size(max = 20) private String username; @NotBlank @Size(max = 50) @Email private String email; @NotBlank @Size(max = 120) private String password; private boolean enabled; // constructors, getters and setters } ``` 然后,您需要创建一个包含注册、登录和电子邮件验证的控制器。 ```java @RestController @RequestMapping("/api/auth") public class AuthController { @Autowired private AuthenticationManager authenticationManager; @Autowired private UserRepository userRepository; @Autowired private PasswordEncoder passwordEncoder; @Autowired private JwtTokenProvider tokenProvider; @Autowired private EmailSender emailSender; @PostMapping("/signin") public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest) { Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken( loginRequest.getUsernameOrEmail(), loginRequest.getPassword() ) ); SecurityContextHolder.getContext().setAuthentication(authentication); String jwt = tokenProvider.generateToken(authentication); return ResponseEntity.ok(new JwtAuthenticationResponse(jwt)); } @PostMapping("/signup") public ResponseEntity<?> registerUser(@Valid @RequestBody SignUpRequest signUpRequest) { if(userRepository.existsByUsername(signUpRequest.getUsername())) { return new ResponseEntity(new ApiResponse(false, "Username is already taken!"), HttpStatus.BAD_REQUEST); } if(userRepository.existsByEmail(signUpRequest.getEmail())) { return new ResponseEntity(new ApiResponse(false, "Email Address already in use!"), HttpStatus.BAD_REQUEST); } // Creating user's account User user = new User(signUpRequest.getName(), signUpRequest.getUsername(), signUpRequest.getEmail(), signUpRequest.getPassword()); user.setPassword(passwordEncoder.encode(user.getPassword())); user.setEnabled(false); userRepository.save(user); String emailVerificationToken = tokenProvider.generateEmailVerificationToken(user); String emailVerificationLink = ServletUriComponentsBuilder.fromCurrentContextPath().path("/api/auth/verifyEmail") .queryParam("token", emailVerificationToken).build().toUriString(); emailSender.sendEmailVerification(user.getEmail(), emailVerificationLink); URI location = ServletUriComponentsBuilder .fromCurrentContextPath().path("/users/{username}") .buildAndExpand(user.getUsername()).toUri(); return ResponseEntity.created(location).body(new ApiResponse(true, "User registered successfully")); } @GetMapping("/verifyEmail") public ResponseEntity<?> verifyEmail(@RequestParam("token") String token) { tokenProvider.validateEmailVerificationToken(token); return new ResponseEntity(new ApiResponse(true, "Email verified successfully"), HttpStatus.OK); } } ``` 这里使用了JWT作为身份验证机制,并将邮件验证令牌发送给用户。 最后,您需要编写一个电子邮件发送器。可以使用JavaMailSender或其他电子邮件服务,例如SendGrid或Mailgun。 ```java @Component public class EmailSender { @Autowired private JavaMailSender mailSender; public void sendEmailVerification(String to, String emailVerificationLink) { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("noreply@example.com"); message.setTo(to); message.setSubject("Activate your account"); message.setText(emailVerificationLink); mailSender.send(message); } } ``` 这就是一个简单的SpringBoot注册登录及电子邮件验证代码示例了。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值