java - Spring:未收到电子邮件消息

标签 java spring spring-boot email dependency-injection

我的电子邮件帐户没有收到有关激活注册的消息。 注册时,我在数据库中看到激活码,并且可以登录,但我想向激活的帐户发送电子邮件。

我尝试更改端口并尝试更改“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/

相关文章:

java - 如何将String类型的数据集转换为Row类型的数据集?

java - Spring Batch - 动态作业选择

java - Spring boot webflux无法解析RestController

java - Spring map 合并所有值

spring - 如何简单地将 slf4j 添加到 pom.xml 包装 log4j?

spring-boot - 为什么 OAuth2UserService 没有在 WebSecurityConfigurerAdapter 下的 Spring Boot 中运行角色授权?

spring - spring starter 项目中的服务 url 是什么?默认服务 url https ://start. spring.io 的替代方案

java - 在 S3 客户端 android 中制作私有(private)图像的 ImageGallery

java - 如何在 Groovy 或 Java 中按元素 "paths"过滤 XML 字符串

java - 使用 swagger codegen 生成后端代码时添加自定义注解