簡體   English   中英

Spring 和 JavaMail 連接超時

[英]Spring and JavaMail connection timeout

我正在嘗試通過 gmail 主機進行電子郵件確認。 我繼續收到“連接超時 500 錯誤”我嘗試更改應用程序屬性和配置類中的參數。 將端口更改為 465 而不是 587,但沒有任何幫助。

如果您發現此頁面不可讀,這可能是...完整項目的鏈接帶有完整的堆棧跟蹤 ---> https://github.com/OlegSokolyk/sweater

這是我的應用程序道具:

spring.mail.host=smtp.gmail.com
spring.mail.username=mailsendtestsweater@gmail.com
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

郵件配置類:

@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;
    }
}

郵件發送服務:

@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;
嵌套異常是:

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

嘗試添加以上兩個屬性

原因是我的互聯網提供商。 我在另一個代碼中嘗試了相同的代碼,並且成功了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM