尝试设置发送激活码时遇到以下问题
ERROR 7020 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for
servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;
nested exception is org.springframework.mail.MailAuthenticationException: Authentication failed;
nested exception is javax.mail.AuthenticationFailedException: 535-5.7.8
Username and Password not accepted. Learn more at 535 5.7.8
https://support.google.com/mail/?p=BadCredentials i15sm26828262wrb.91 - gsmtp ] with root cause
我已经尝试过解决此问题的所有建议:两步验证功能已关闭,安全性较低的应用程序被允许使用,并且添加了所有其他属性,但没有任何帮助。请问出什么问题了。
application.properties
spring.datasource.url=jdbc:postgresql://localhost/myDB
spring.datasource.username=postgres
spring.datasource.password=*password for DB*
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
spring.freemarker.expose-request-attributes=true
spring.mail.host=smtp.gmail.com
spring.mail.username=mymail@gmail.com (100% correct - copypasted)
spring.mail.password=*password for mail* (also 100% correct)
spring.mail.port=465
spring.mail.protocol=smtps
mail.debug=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
mail.smtp.starttls.enable=true
mail.smtp.auth=true
MailService
package com.example.myproject.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
@Service
public class MailService {
private final JavaMailSender javaMailSender;
public MailService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
@Value("${spring.mail.username}")
private String username;
public void send(String mailTo, String subject, String message){
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(username);
mailMessage.setTo(mailTo);
mailMessage.setSubject(subject);
mailMessage.setText(message);
javaMailSender.send(mailMessage);
}
}
MailConfig
package com.example.myproject.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import java.util.Properties;
@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("${spring.mail.protocol}")
private String protocol;
@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.setProperty("mail.transport.protocol", protocol);
properties.setProperty("mail.debug", debug);
properties.setProperty("mail.smtp.auth", "true");
return mailSender;
}
}
我还应该注意MailService中的
private final JavaMailSender javaMailSender;
public MailService(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
我收到这样的消息:
无法自动接线。 有一个以上的“ JavaMailSender”类型的bean。 豆子: getMailSender(MailConfig.java)mailSender(MailSenderPropertiesConfiguration.class)
答案 0 :(得分:0)
正如异常消息所说,Spring已经有超过1个用于注入的“ JavaMailSender”。 发生这种情况是因为您不需要在MailConfiig中手动创建JavaMailSender。 Spring根据属性文件创建它。