我正在尝试通过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;嵌套的异常是:
spring.mail.properties.mail.smtp.connectiontimeout = 5000spring.mail.properties.mail.smtp.writetimeout = 5000
尝试添加以上两个属性