gpt4 book ai didi

java - 如何在 Spring Boot 中设置经过身份验证的 JavaMailSender

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:04 25 4
gpt4 key购买 nike

我似乎无法通过 Spring Boot 的 application.properties 正确配置 Spring 的 JavaMailSender 实现。

以下使用标准 JavaMail API 的代码可以很好地发送电子邮件:

Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "587");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "587");

Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("username", "password");
}
});

try {

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("sender@gmail.com"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipientaddress@gmail.com"));
message.setSubject("Test Message");
message.setText("This is a test message.");

Transport.send(message);
System.out.println("Sent");
} catch (MessagingException e) {
throw new RuntimeException(e);
}

我的 Spring Boot 应用程序的 application.properties 包含以下与电子邮件传送相关的属性:

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.username=username
spring.mail.password=password
spring.mail.properties.mail.transport.protocol=smtp
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000

Spring Boot 应用程序中的以下代码不会发送任何电子邮件,但也不会引发任何异常:

@Autowired
private JavaMailSender emailSender;

@RequestMapping("/sendEmail")
public ResponseEntity<Void> sendEmail(HttpServletRequest httpRequest) {

try {

MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom("sender@gmail.com");
helper.setTo("recipientaddress@gmail.com");
helper.setText("This is a test message.");
helper.setSubject("Test Message");
emailSender.send(message);
System.out.println("Sent");
}
catch (MessagingException me) {
logger.error("Failed to send email: {}", me.getMessage());
}

return new ResponseEntity<Void>(null, HttpStatus.OK);
}

最佳答案

当您使用标准 JavaMail API 时,您使用以下命令执行身份验证

new PasswordAuthentication ("username", "password");

使用 Spring boot,您没有进行身份验证,您有两个选择:

  1. 使用 application.properties 中的用户和密码进行身份验证,创建类似于 JavaMail API 所使用的 session
  2. 委托(delegate) Spring Boot 身份验证,从 application.properties 中删除与电子邮件配置相关的所有设置并使用服务器上定义的设置,替换为

spring.mail.jndi-name=java:jboss/mail/exampleJboss

sendEmail 方法将与 JavaMailSender 一起使用

关于java - 如何在 Spring Boot 中设置经过身份验证的 JavaMailSender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com