从 Spring Boot 应用程序发送电子邮件时遇到问题
Posted
技术标签:
【中文标题】从 Spring Boot 应用程序发送电子邮件时遇到问题【英文标题】:Having troubles sending emails from spring boot application 【发布时间】:2018-02-21 13:30:16 【问题描述】:我一直在尝试通过 Spring Boot 发送电子邮件,但似乎无法成功。我已经使用 javamail api 很长时间了,但想将 springboot 与 spring mail 一起使用。
public class SendMail
@Autowired
private JavaMailSender javaMailSender;
public void sendingMail(String to, String subject, String body)
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(body);
javaMailSender.send(message);
这是我的邮件
@Controller
public class ExamPle
@Autowired
private SendMail sendMail;
@RequestMapping("/he")
public String homePage()
sendMail.sendingMail("bobobush007@gmail.com", "Welcome George", "Sample Message here");
return "Sent";
我的 pom 文件中已经有 sprint-boot-starter-mail,但我不断收到此错误消息。我什至看过有关如何执行此操作的教程的 youtube 视频,但它不起作用。我正在使用 Spring Tool Suite 版本:3.9.0.RELEASE。
属性文件
spring.mail.host=smtp.gmail.com
spring.mail.username=my-email-address
spring.mail.password=my-password
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.defaultEncoding=UTF-8
2017-09-14 05:25:57.811 信息 12576 --- [主要] com.example.demo.EmaildemoApplication : 开始 带有 PID 12576 的 Georges-MacBook-Pro.local 上的 EmaildemoApplication (由 /Users/georgetebo/STS Projects/Emaildemo 中的 georgetebo 开始) 2017-09-14 05:25:57.814 信息 12576 --- [主要] com.example.demo.EmaildemoApplication :没有活动的配置文件集, 回退到默认配置文件:默认 2017-09-14 05:25:57.845 信息 12576 --- [主要] ationConfigEmbeddedWebApplicationContext:刷新 org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3d3fcdb0: 启动日期 [Thu Sep 14 05:25:57 WAT 2017];上下文层次的根 2017-09-14 05:25:58.652 信息 12576 --- [主要] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat 初始化为 端口:8080 (http) 2017-09-14 05:25:58.662 INFO 12576 --- [ main] o.apache.catalina.core.StandardService : 启动服务 [Tomcat] 2017-09-14 05:25:58.662 INFO 12576 --- [主要] org.apache.catalina.core.StandardEngine :启动 Servlet 引擎: Apache Tomcat/8.5.20 2017-09-14 05:25:58.714 信息 12576 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]: 初始化 Spring 嵌入式 WebApplicationContext 2017-09-14 05:25:58.714 信息 12576 --- [ost-startStop-1] os.web.context.ContextLoader:根 WebApplicationContext: 初始化在 871 毫秒内完成 2017-09-14 05:25:58.821 INFO 12576 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean:映射 servlet:'dispatcherServlet' 到 [/] 2017-09-14 05:25:58.823 信息 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean :映射过滤器: 'characterEncodingFilter' 到:[/] 2017-09-14 05:25:58.824 INFO 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean:映射过滤器:“hiddenHttpMethodFilter”到:[/] 2017-09-14 05:25:58.824 信息 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean :映射过滤器: 'httpPutFormContentFilter' 到:[/] 2017-09-14 05:25:58.824 信息 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : 映射过滤器:“requestContextFilter”到:[/] 2017-09-14 05:25:58.848 警告 12576 --- [主要] ationConfigEmbeddedWebApplicationContext:遇到异常 在上下文初始化期间 - 取消刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“example”的 bean 时出错:不满足的依赖关系 通过字段“sendMail”表示;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 'com.example.demo.SendMail' 类型的合格 bean 可用: 预计至少有 1 个 bean 有资格作为 autowire 候选者。 依赖注解: @org.springframework.beans.factory.annotation.Autowired(required=true) 2017-09-14 05:25:58.850 信息 12576 --- [主要] o.apache.catalina.core.StandardService :停止服务 [Tomcat] 2017-09-14 05:25:58.861 信息 12576 --- [主要] utoConfigurationReportLoggingInitializer:
启动 ApplicationContext 时出错。显示自动配置 报告启用“调试”后重新运行您的应用程序。 2017-09-14 05:25:58.927 错误 12576 --- [主要] o.s.b.d.LoggingFailureAnalysisReporter:
***************************应用程序启动失败
说明:
com.example.demo.Example 中的字段 sendMail 需要一个 bean 类型 'com.example.demo.SendMail' 找不到。
行动:
考虑在你的 配置。
这是我的 Pom 文件
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0
<groupId>com.mailsender</groupId>
<artifactId>MailSender</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MailSender</name>
<description>ZemoPoint for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
我已经卸载了我的 jdk 以及 STS 并安装了新副本。现在我收到此错误
【问题讨论】:
检查你的 pom 文件,看看 javax.mail 是否被意外标记为“提供”;因此它在运行时丢失 请发布您的 pom.xml 文件的内容。没有它,很难确定为什么会出现此错误。 @spiritwalker @g00glen00b 按要求添加 pom 文件。 这很奇怪,我使用的代码完全相同,但没有遇到此错误。我认为您的 IDE 中一定有问题。您可以尝试使用 Maven 运行它吗? (在命令行执行mvn spring-boot:run
)
我尝试了新安装的 eclipse 和 STS,但仍然遇到同样的错误。我正在使用 macOS Sierra @g00glen00b 你能告诉我你使用的 IDE 和版本吗?
【参考方案1】:
我认为您应该使用的密码是 gmail 生成的应用程序密码,它不应该只是我猜的任何密码。
【讨论】:
Marc,是什么让您认为原始发布者没有使用正确的密码?我在错误消息中没有看到任何类似的内容。【参考方案2】:这行得通。
@Service
public class SendMail
@Autowired
private JavaMailSender javaMailSender;
public void sendingMail(String to, String subject, String body)
MimeMessage message=javaMailSender.createMimeMessage();
MimeMessageHelper helper;
helper=new MimeMessageHelper(message,true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(body);
javaMailSender.send(message);
【讨论】:
【参考方案3】:似乎您的属性未正确获取,例如:
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
你应该尝试使用像这样的其他方式:
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(emailProperties.getHost());
mailSender.setPort(Integer.parseInt(emailProperties.getPort()));
mailSender.setUsername(emailProperties.getUsername());
mailSender.setPassword(emailProperties.getPassword());
Properties javaMailProperties = new Properties();
javaMailProperties.put("mail.smtp.starttls.enable", "true");
javaMailProperties.put("mail.smtp.auth", "true");
javaMailProperties.put("mail.transport.protocol", "smtp");
javaMailProperties.put("mail.debug", "true");
mailSender.setJavaMailProperties(javaMailProperties);
从Spring Boot Freemarker Email Template的帖子中查看更多信息
希望对您有所帮助!
【讨论】:
【参考方案4】:您是否尝试将 javax.mail 添加到您的 pom 中? Spring 邮件发送者依赖于 JavaMail。
【讨论】:
没关系,spring-boot-starter-mail
已经包含邮件 API 实现:github.com/spring-projects/spring-boot/blob/…
我看到同样的问题你需要添加 javax.mail ClassNotFoundException: javax.mail.MessagingException以上是关于从 Spring Boot 应用程序发送电子邮件时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 应用程序中使用 Freemarker 模板发送电子邮件?
让 Spring Boot 应用程序通过 AWS SES 发送简单电子邮件需要哪些配置步骤?
使用 Spring Boot OAuth2 针对 Google 进行身份验证时如何将 google 用户电子邮件发送到白名单用户
Spring Boot - spring-boot-starter-mail 为 Smartermail 发送电子邮件不起作用