Spring和JavaMail连接超时

问题描述 投票:0回答:1

我正在尝试通过gmail主机进行电子邮件确认。而且我继续收到“连接超时500错误”我尝试在应用程序属性和配置类中更改参数。将端口更改为465 insteed 587,但没有任何帮助。

如果您发现此页面不可读,可能是...在具有完整堆栈跟踪的完整项目上有链接---> https://github.com/OlegSokolyk/sweater

这是我的应用道具:

spring.mail.host=smtp.gmail.com
[email protected]
spring.mail.password=vhmixskurxwrymtu
spring.mail.port=587
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("${mail.debug}")
    private String debug;

    @Bean
    public JavaMailSender getMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

        mailSender.setHost(host);
        mailSender.setPort(port);
        mailSender.setUsername(username);
        mailSender.setPassword(password);

        Properties properties = mailSender.getJavaMailProperties();

        properties.put("mail.transport.protocol", "smtp");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.debug", debug);

        return mailSender;
    }
}

MailSender服务:

@Service
public class MailSender {
    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String username;


    public void send(String emailTo, String subject, String message) {

        try {
            SimpleMailMessage mailMessage = new SimpleMailMessage();

            mailMessage.setFrom(username);
            mailMessage.setTo(emailTo);
            mailMessage.setSubject(subject);
            mailMessage.setText(message);

            mailSender.send(mailMessage);
        } catch (MailException e) {
            e.printStackTrace();
        }
    }
}

注册方法:

public boolean addUser(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 next link: http://localhost:8080/activate/%s",
                    user.getUsername(),
                    user.getActivationCode()
            );

            mailSender.send(user.getEmail(), "Activation code", message);
        }

        return true;
    }

注册控制器:

@PostMapping("/registration")
    public String addUser(User user, Model model) {

        if (!userService.addUser(user)) {
            model.addAttribute("message", "User exists");
            return "registration";
        }

        return "redirect:/login";
    }

堆栈跟踪:

org.springframework.mail.MailSendException:邮件服务器连接失败嵌套的异常是com.sun.mail.util.MailConnectException:无法连接到主机,端口:smtp.gmail.com,587;超时-1;嵌套的异常是:java.net.ConnectException:连接超时:连接。失败消息:com.sun.mail.util.MailConnectException:无法连接到主机,端口:smtp.gmail.com,587;超时-1;嵌套的异常是:

java spring email javamail
1个回答
0
投票

spring.mail.properties.mail.smtp.connectiontimeout = 5000spring.mail.properties.mail.smtp.writetimeout = 5000

尝试添加以上两个属性

© www.soinside.com 2019 - 2024. All rights reserved.