我没有通过激活注册在电子邮件帐户上收到消息。 在注册时,在数据库中我看到激活码,并且可以登录,但是我想向激活的帐户发送电子邮件。
我尝试更改端口,并尝试更改“ smtp”上的“ smtps” 我的属性:
spring.mail.host=smtp.gmail.com
spring.mail.username=mymail@gmail.com
spring.mail.password=mypass
spring.mail.port=587
spring.mail.protocol= smtps
spring.mail.properties.mail.smtp.auth = true;
spring.mail.properties.mail.smtp.starttls.enable = true;
mail.debug= true
MailConfig:
@Configuration
public class MailConfig {
@Value("${spring.mail.host}")
private String host;
@Value("${spring.mail.username}")
private String username;
@Value("${spring.mail.password}")
private String password;
@Value("${spring.mail.port}")
private int port;
@Value("${spring.mail.protocol}")
private String protocol;
@Value("${mail.debug}")
private String debug;
@Value("${spring.mail.properties.mail.smtp.auth}")
private String auth;
@Value("${spring.mail.properties.mail.smtp.starttls.enable}")
private String enable;
@Bean
public JavaMailSender javaMailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host);
mailSender.setPort(port);
mailSender.setUsername(username);
mailSender.setPassword(password);
Properties properties = mailSender.getJavaMailProperties();
properties.setProperty("mail.transport.protocol", protocol);
properties.setProperty("mail.debug", debug);
properties.setProperty("mail.smtp.auth", auth);
properties.setProperty("mail.smtp.starttls.enable", enable);
return mailSender;
}
}
UserService:
@Service
public class UserService implements UserDetailsService {
private final UserRepository userRepository;
private final MailSender mailSender;
public UserService(UserRepository userRepository, MailSender mailSender) {
this.userRepository = userRepository;
this.mailSender = mailSender;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return userRepository.findByUsername(username);
}
public boolean registerUser(User user) {
User userFromDb = userRepository.findByUsername(user.getUsername());
if (userFromDb != null) {
return false;
}
user.setActive(true);
user.setRoles(Collections.singleton(Role.USER));
user.setActivationCode(UUID.randomUUID().toString());
userRepository.save(user);
if (StringUtils.isEmpty(user.getEmail())) {
String message = String.format("Hello, %s \n" + "Welcome to Sweater. Please visit link: http://localhost:8080/activate/%s",
user.getUsername(),
user.getActivationCode()
);
mailSender.send(user.getEmail(), "Activation code", message);
}
return true;
}
public boolean activateCode(String code) {
User user = userRepository.findByActivationCode(code);
if (user == null) {
return false;
}
user.setActivationCode(null);
userRepository.save(user);
return true;
}
}
控制器
@GetMapping("/activate/{code}")
public String activate(Model model, @PathVariable String code) {
boolean isActivated = userService.activateCode(code);
if(isActivated){
model.addAttribute("info", "User activated");
}else {
model.addAttribute("info", "Activation code is not found");
}
return "login";
}
答案 0 :(得分:1)
@Autowired
MailSender
依赖注入:春季中的@Autowired
注释自动将依赖豆注入POJO类的关联引用中。此注释将通过匹配数据类型来注入依赖的bean(即在内部作为自动装配byType)。我们可以
@Autowired
关于财产@Autowired
上的setter方法@Autowired
(在构造函数上更好)(优于单个字段的自动装配)