Email 邮件方式激活注册账号

在网站中,我们经常需要注册一个账号,然后用这个账号来登录网页,执行一些经过身份认证后才能执行的操作, 为了确定注册的账号的确是用户自己的信息,并保证用户账号的安全性,在这里引入了 邮件激活账号的方式来验证用户注册的账号, 在用户忘记密码时,可以通过邮箱来修改密码,这些功能我们在浏览网页时,经常会遇到,但是这些功能到底是怎么实现的,看起来很神秘,其实方法很简单,下面我自己实现了一个邮件激活账号的功能,用户注册表的结构如下:

 

接下来是发送邮件的主要的代码片段:

首先要引用两个命名空间   system.Net.Mail     system.Net

 

具体代码如下:


        /// <summary>
        /// 注册账号激活
        /// </summary>
        /// <param name="email">email 账号</param>
        /// <param name="activecode">随机码</param>
        /// <param name="number">用户编号</param>
   public void SendEmail(string email, string activecode ,string number)
   {
       try
       {
           MailMessage mailmsg = new MailMessage();


           mailmsg.From = new MailAddress("sunnydayhu@163.com");
           // mailmsg.Sender  = new MailAddress ("sunnydayhu@163.com");

           mailmsg.To.Add(email);

           // 邮件标题
           mailmsg.Subject = "注册账号激活";
           // 邮件的优先级
           mailmsg.Priority = MailPriority.High;

           // 邮件内容
           StringBuilder strbulid = new StringBuilder();

           strbulid.Append("请单击以下链接完成账号激活");

           strbulid.Append("</br><a href='http://localhost:15464/account/login?activecode='" + activecode + "&id=" + number + "'>激活账号</a>");

           strbulid.Append("</br></br> 或者直接输入以下地址: http://localhost:15464/account/login?activecode=" +activecode+"&id="+ number);

           // 设置邮件正文
           mailmsg.Body = strbulid.ToString();
           //设置邮件正文的编码方式
           mailmsg.BodyEncoding = System.Text.Encoding.UTF8;
           // 是否以 html格式显示
           mailmsg.IsBodyHtml = true;

           SmtpClient smtclient = new SmtpClient();
           
           smtclient.UseDefaultCredentials =true;
           //指定如何处理待发送的电子邮件
           smtclient.DeliveryMethod = SmtpDeliveryMethod.Network;

           // 发送邮件的主机名称
          smtclient.Host = "smtp.163.com"; 
           // 设置 SMTP 的端口号
          smtclient.Port = 25;

          NetworkCredential netcred = new NetworkCredential();

	    // 发送邮件的邮箱的用户名(完整的邮箱号去掉 @后面的部分)
          netcred.UserName = "sunnydayhu"; 

	    // 发送邮件的邮箱的密码
	  netcred.Password = "*****"; 

           smtclient.Credentials = netcred;
	   // 发送邮件
           smtclient.Send(mailmsg);

       }
       catch (Exception )
       {
       }

   }

 

 

在账号注册成功时,向注册账号的邮箱中发送一封账号激活的邮件通知,在没有激活账号时, 用户无法使用登账号进行登录,系统会提示: 没有通过邮箱验证

 

运行效果如下 :

 

 

 

这只是一个简单的实现邮件激活账号的功能,如果有兴趣的话,自己也可以实现这个功能。


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值