我的电子邮件帐户没有收到有关激活注册的消息。 注册时,我在数据库中看到激活码,并且可以登录,但我想向激活的帐户发送电子邮件。
我尝试更改端口并尝试更改“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
邮件配置:
@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;
}
}
用户服务:
@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;
}
}
Controller
@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";
}
最佳答案
@Autowired
MailSender
依赖注入(inject): Spring中的@Autowired
注解自动将依赖的bean注入(inject)到POJO类的关联引用中。此注释将通过匹配数据类型来注入(inject)依赖的 bean(即在内部作为 Autowiring byType 工作)。我们可以
@Autowired
属性@Autowired
在 setter 方法上- 构造函数上的
@Autowired
(优于单个字段 Autowiring )
关于java - Spring:未收到电子邮件消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57739652/