我一直在尝试在我的应用程序中实现密码重置,为此我想向用户发送一封包含验证码的电子邮件。 我已经构建了这样的java邮件实现
配置:
@Configuration class MailConfig {
@Bean fun javaMailSender(): JavaMailSender = JavaMailSenderImpl()
}
服务:
@Service class MailService {
@Autowired lateinit var sender: JavaMailSender
fun sendMail(email: String, text: String) {
val msg = sender.createMimeMessage()
val helper = MimeMessageHelper(msg, true)
helper.setTo(email)
helper.setSubject("Test")
helper.setText(text)
sender.send(msg)
}
}
应用程序属性:
spring.mail.host=smtp-relay.brevo.com
spring.mail.port=587
spring.mail.username=(senderId)@smtp-brevo.com
spring.mail.password=(password)
spring.mail.properties.mail.smptp.auth=true
spring.mail.properties.mail.starttls.enable=true
spring.mail.properties.mail.starttls.required=true
我只是从 REST 端点调用 sendMail() 方法来处理发送重置请求,但当端点被击中时,服务器会生成以下错误:
jakarta.mail.MessagingException:来自 SMTP 主机的问候语不好:localhost,端口:25,响应:421 无法连接到 SMTP 服务器
但是,我不明白为什么它在 127.0.0.1:25 上寻找服务器,而属性指定了完全不同的主机和端口。 我已经仔细检查了我的 smtp 服务的属性名称以及登录信息。我相信问题出在 application.properties 中的某个地方,因为我确认了我编写的用于实现邮件服务的代码,如下所示:https://www.baeldung.com/spring-email
您不使用 Spring Boot 的自定义 bean。它在
org.springframework.boot.autoconfigure.mail.MailSenderPropertiesConfiguration
中实例化和配置。
如果您自己为
org.springframework.boot.autoconfigure.mail.JavaMailSenderImpl
提供bean,您还必须小心配置它。